Android's drawables对编写程序是非常有用的。A Drawable通常是一个与view相关的插件后的画图容器。例如。一个aBitmapDrawable是用来显示图片的,a ShapeDrawable 是用来画图和渐变的等等。你甚至可以通过它还创建负责的渲染。
Drawables允许你不需要继承就可以很容易的定制widgets渲染。事实是,Android的应用程序和widgets 是使用该drawables对象的,在android的核心框架中大约有700个drawables被使用。正式以为他是如此广泛的被使用,Android对它进行了优化。例如,每一次你创建一个按钮时,一个新的drawable就会被装载。这就意味着应用程序中所有的使用不同drawablesd对象实现不同背景的按钮,所有的drawables对象公用一个公用的状态,我们成“constant state”,这个状态的内如根据你使用的不同drawables对象而不同,但是它通常包括一个资源所有的属性。以按钮为例,常态包括一个位图。如此一所有按钮就可以共享一张位图。这将会节省很多的资源。
下面的图介绍了你设置一张图给两个不同View作为背景的创建过程。正如你所看到的那样,两个drawables被创建,但是共享公共的部分也就是同一张位图。
这种状态分享特点极大避免了浪费内存,但是当你试图去修改drawable的属性时它会导致一些问题。假设是关于书的的列表的程序,书名之后会当你标注为喜欢的时候显示为不透明的而标注不喜欢的时候完全透明星星。为了达到这样的效果,你也许会在你的adapter个getView实现下面的方法:
listItem.setText(book.getTitle()); |
Drawable star = context.getResources().getDrawable(R.drawable.star); |
不幸的是,上面的那段代码会有一个很奇怪的结果,所有的drawables对象都会有相同的透明值。
这种结果能够用上面的“常态”来解释。因为我们从一个list item中获取一个drawable对象时,constant state是一样的,对BitmapDrawable来说,透明值就是一个常态,因此,改变一个drawable对象实例的透明值来说,会改变所有其他对象的透明值,更糟糕是,这种问题在1.1和1.0的是不好解决的。
在1.5或者更好的设备上通过mutate()方法是很容易解决上述问题。当你对一个drawable对象调用这个方法时,drawable对象就会被复制而不会印象其他对象。记住bitmap对象依旧是被重用的,即使是实用mutate(),下面这幅图说明调用mutate()对象之后情况:
让我更新一下我们的代码:
为了方便mutate()是返回drawable对象自己,这就允许我们采用链的方法调用,他不会产生新的对象,通过上面的代码片段,我的程序行为变得正常。
分享到:
相关推荐
android-gif-drawable 用于在Android上显示动画GIF
NULL 博文链接:https://410063005.iteye.com/blog/1769492
drawable实现三角形,原博客地址:https://blog.csdn.net/u010356768/article/details/76040972#comments 大家去原博客地址看下就知道了。不用下载浪费积分
Android所有系统资源图标android.R.drawable.xxx查看软件 源码地址:http://blog.csdn.net/dianyueneo/article/details/7197067
android 通过图片名称获取 drawable 目录下的图片 ~~~~~~~~~~~~~~~~~
android中的drawable集合,包括Bitmap、shape、Layer、Transition等等
查看android.R.drawable图片。点击并显示出名称 UTF-8 android2.2~android4.2
Android中Drawable分类汇总,学习drawable的文档,很全
this is a sample showing how to display drawable in android.
一个支持设置各种drawable的android库,可直接在layout.xml中查看
Android-android-gif-drawable.zip,在android上显示动画gif的视图和绘图,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有安全性优势。
Overview 在今天的开发学习中,我遇到了一个需求是在App的flash页面添加bing每日一图。这些都简单,但是当我获取到了图片的Url时,我就遇到了一个非常尴尬的问题。就是如何将Url转换为Drawabl... drawable = Drawable
Android系统图标android.R.drawable下的所有图标查看软件
Android自定义Drawable的代码例子。用于演示自定义Drawable的功能,包括自定义形状、自定义水印、自定义淡出等几种类型的Drawable。
android drawable下的xml详解
代码实现drawable的selector效果,不用为每个控件写selector样式; 另外,实现圆形图片处理、圆角图片处理功能
Android的Drawable学习Demo
android-gif-drawable Views and Drawable for animated GIFs in Android. Overview Bundled GIFLib via JNI is used to render frames. This way should be more efficient than WebView or Movie classes. ...
这个程序是对android的部分Drawable的实现。包括了BitmapDrawable,InsetDrawable,ClipDrawable,TransitionDrawable,GradientDrawable,ScaleDrawable,LevelListDrawable,StateListDrawable,layerDrawable。 ...
Android Drawable Importer Plugin This plugin consists of three main features. You can access them by right-clicking anywhere, but not on a file, inside an Android (library) module under New. ...