细说Android drawable
2015-09-19 18:09
513 查看
Android drawable是一个抽象的对象,可以画到canvas,也就是通过可以canvas来展现具体的drawable,不像view,drawable本身无法处理相应任何事件,也无法与用户直接进行交互。
Android提供的对view进行渲染方式:
1,在layout配置文件中设置具体的drawable对象,可以是一副图片,也可以是一个动画等;比如:
你只需要定义展现的对象,由系统去执行相应的渲染过程。
2,直接把drawable对象绘制到canvas上:
通过继承某实现某各类的onDraw() 方法(自定义view中经常使用)或者直接调用Canvas draw…()methods
3,在继承SurfaceView的类中,把drawable对象绘制其中的canvas上。SurfaceView比较复杂,此处不再举例,稍后出单独讨论有关SurfaceView内容的文章。
获取drawable对象的方式:
1,从资源文件的图片文件创建;
2,从定义的资源XML文件中创建。
资源文件定义:
Drawable对象的获取:
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 对象关联。
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...
相关文章推荐
- android studio集成极光推送,获取附加字段详细,并提供自己写的一个demo,绝对不是官方demo
- android intent和intent action大全
- Android Action Bar
- Android个人开发者需要收藏的好东西
- 年月日关联 判断平年闰年月份天数判断 放入Spinner 菜鸟
- android AsyncTask介绍
- Android中的线程机制
- 【Android】Scrollview 顶端固定 or 滑动锚钉
- Android动画(透明度,平移,旋转,拉伸,动态添加按钮)
- [2015-09-19 15:07:13 - LinearLayoutActivity] Unable to resolve target 'android-14'
- Android 属性动画(一):Animator属性动画相对于Animation的优势
- android4.x 增加一个新按键&&修改android默认语言
- Android禁止横屏竖屏切换
- Android Studio的Gradle工程导入第三方源代码类库
- android greendao的外部封装不太友好。
- Android性能分析工具介绍
- 【android基础】——Android布局相关
- Android中Activity之间切换动画的修改
- android socket通信
- Android Api Demos登顶之路(七十四)Graphics-->CreateBitmap