您的位置:首页 > 移动开发 > Android开发

细说Android drawable

2015-09-19 18:09 513 查看
Android drawable是一个抽象的对象,可以画到canvas,也就是通过可以canvas来展现具体的drawable,不像view,drawable本身无法处理相应任何事件,也无法与用户直接进行交互。

Android提供的对view进行渲染方式:

1,在layout配置文件中设置具体的drawable对象,可以是一副图片,也可以是一个动画等;比如:

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher">
</ImageView>


你只需要定义展现的对象,由系统去执行相应的渲染过程。

2,直接把drawable对象绘制到canvas上:

通过继承某实现某各类的onDraw() 方法(自定义view中经常使用)或者直接调用Canvas draw…()methods

Bitmap mBitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
Canvas mCnavas = new Canvas(mBitmap);
mCnavas.drawBitmap(bitmap,...);


3,在继承SurfaceView的类中,把drawable对象绘制其中的canvas上。SurfaceView比较复杂,此处不再举例,稍后出单独讨论有关SurfaceView内容的文章。

获取drawable对象的方式:



1,从资源文件的图片文件创建;

Resources res = mContext.getResources();
Drawable myImage = res.getDrawable(R.drawable.my_image);


2,从定义的资源XML文件中创建。

资源文件定义:

<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/image_expand">
<item android:drawable="@drawable/image_collapse">
</transition>


Drawable对象的获取:

Resources res = mContext.getResources();
TransitionDrawable transition = (TransitionDrawable)res.getDrawable(R.drawable.expand_collapse);
ImageView image = (ImageView) findViewById(R.id.toggle_image);
image.setImageDrawable(transition);


Drawable对象的类型:



ConstantState

每个 Drawable 类对象类都关联有一个 ConstantState 类对象,ConstantState 保存 Drawable 类对象的一些恒定不变的数据。从同一个 res 中创建的 Drawable 类对象,为了节约内存,它们会共享同一个 ConstantState 类对象。比如一个 ColorDrawable 类对象,它会关联一个 ColorState 类对象,color 的颜色值是保存在 ColorState 类对象中的。如果修改 ColorDrawable 的颜色值,会修改到 ColorState 的值,会导致和 ColorState 关联的所有的 ColorDrawable 的颜色都改变。



Output



getDrawable(int)总是返回一个新的Drawable对象。



Output:



在修改 Drawable 的属性的时候,需要先调用 public Drawable mutate() 方法,让 Drawable 复制一个新的 ConstantState 对象关联。

Drawable myImage = ...
myImage.mutate().set...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: