Android UI开发专题——各种Drawable

简介:
 本次我们主要讲解Android平台下的各种Drawable,这里在SDK的android.graphics.drawable包下面可以看到有各种Drawable类多达十几种,它们到底之间有什么关系和区别呢?

  一、AnimationDrawable

  顾名思义该类主要表示动画的图形类,可以实现逐帧播放的效果,下面代码示例如下

  1. 定义一个cwj_animation.xml 放到res/drawable 目录下,其中定义的属性duration为延时,单位为毫秒,而oneshot属性表示是否仅播放一次,内容为:

  2.在java中调用也很简单

  ImageView img = (ImageView)findViewById(R.id.cwj_image); //首先声明一个ImageView对象在xml布局文件中

  img.setBackgroundResource(R.drawable.cwj_animation); //我们刚才的animation定义的xml文件

  AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground(); //构造AnimationDrawable对象

  frameAnimation.start() //开始播放动画

  3. AnimationDrawable类还提供了一些常用的方法如下:

  void stop() 停止

  void addFrame(Drawable frame, int duration) 添加一帧,类似xml中的布局

  Drawable getFrame(int index) 返回某帧的Drawable图形

  int getNumberOfFrames() 返回总共动画帧数

  boolean isOneShot() 是否仅播放一次

  boolean isRunning() 是否正在播放

  二、BitmapDrawable

  在Android平台中对于缩放、变形的Bitmap对象由BitmapDrawable类表示,其构造方法也很简单,由于该类继承于android.graphics.drawable.Drawable,相对Drawable而言提供了更多的有关位图的操作方法,主要的构造方法如下:

  BitmapDrawable() //直接构造一个空的对象,这样方式不推荐使用,SDK标记为deprecated.未来可能无法使用。

  BitmapDrawable(Resources res) //从资源中构造

  BitmapDrawable(Bitmap bitmap) //从Bitmap对象直接构造,但也是不推荐,而是希望用下一种

  BitmapDrawable(Resources res, Bitmap bitmap) //从bitmap中创建设置初始的分辨率从res中

  BitmapDrawable(String filepath) //从具体文件路径构造,也不推荐使用,而是下一种更好

  BitmapDrawable(Resources res, String filepath) //同上

  BitmapDrawable(InputStream is) //从输入流中构造,同样推荐下面的方法

  BitmapDrawable(Resources res, InputStream is) //同上

  在BitmapDrawable类中相对于Drawable类主要新增了以下几种方法,均比较实用:

  final Bitmap getBitmap() 获取一个Bitmap对象

  int getOpacity() //获取透明度

  void setAntiAlias(boolean aa) //是否抗锯齿

  void setTargetDensity(Canvas canvas) //设置目标Canvas密度

  void setTargetDensity(DisplayMetrics metrics)

  三、ClipDrawable

  ColorDrawable

  Drawable

  GradientDrawable

  InsetDrawable

  LayerDrawable

  LevelListDrawable

  NinePatchDrawable

  PaintDrawable

  PictureDrawable

  RotateDrawable

  ScaleDrawable

  ShapeDrawable

  StateListDrawable

  TransitionDrawable

  以上的类型在常见的开发一般较少出现,主要是基类构造使用,Android内部的多个Widget基础控件使用了,感兴趣的网友可以查看开源GIT中的相关内容。

相关文章
|
6天前
|
存储 安全 Android开发
安卓应用开发:构建一个高效的用户登录系统
【5月更文挑战第3天】在移动应用开发中,用户登录系统的设计与实现是至关重要的一环。对于安卓平台而言,一个高效、安全且用户体验友好的登录系统能够显著提升应用的用户留存率和市场竞争力。本文将探讨在安卓平台上实现用户登录系统的最佳实践,包括对最新身份验证技术的应用、安全性考量以及性能优化策略。
|
8天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
12小时前
|
Java API 开发工具
java与Android开发入门指南
java与Android开发入门指南
5 0
|
1天前
|
前端开发 Java Android开发
Android UI底层绘制原理
Android UI底层绘制原理
5 0
|
1天前
|
Android开发 Kotlin
Kotlin开发Android之基础问题记录
Kotlin开发Android之基础问题记录
11 1
|
1天前
|
Java Android开发
Android开发@IntDef完美替代Enum
Android开发@IntDef完美替代Enum
9 0
|
2天前
|
Android开发
Android 盒子开发过程中遇到的问题及解决方法
Android 盒子开发过程中遇到的问题及解决方法
7 2
|
3天前
|
机器学习/深度学习 算法 Android开发
安卓应用开发:打造高效通知管理系统
【5月更文挑战第6天】 在现代移动应用的海洋中,用户经常面临信息过载的挑战。一个精心设计的通知管理系统对于提升用户体验至关重要。本文将探讨在安卓平台上如何实现一个高效的通知管理系统,包括最佳实践、系统架构设计以及性能优化技巧。通过分析安卓通知渠道和优先级设置,我们的目标是帮助开发者构建出既能吸引用户注意,又不会引发干扰的智能通知系统。
16 2
|
3天前
|
安全 Linux Android开发
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
该文介绍了如何在Linux服务器上交叉编译Android的FFmpeg库以支持HTTPS视频播放。首先,从GitHub下载openssl源码,解压后通过编译脚本`build_openssl.sh`生成64位静态库。接着,更新环境变量加载openssl,并编辑FFmpeg配置脚本`config_ffmpeg_openssl.sh`启用openssl支持。然后,编译安装FFmpeg。最后,将编译好的库文件导入App工程的相应目录,修改视频链接为HTTPS,App即可播放HTTPS在线视频。
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
|
8天前
|
存储 Java Android开发
安卓应用开发中的内存优化策略
【4月更文挑战第30天】在移动开发领域,尤其是安卓平台上,内存管理是影响应用性能和用户体验的关键因素。由于安卓设备的硬件资源有限,不合理的内存使用会导致应用响应缓慢、消耗过多电量甚至崩溃。本文将探讨针对安卓平台的内存优化技巧,旨在帮助开发者提高应用的性能和稳定性,从而提升用户满意度。我们将详细讨论内存泄漏的预防、合理的内存分配策略以及高效的内存回收方法。