Android基础入门教程——8.1.3 Android中的13种Drawable小结 Part 3
标签(空格分隔): Android基础入门教程
本节引言:
本节我们来把剩下的四种Drawable也学完,他们分别是: LayerDrawable,TransitionDrawable,LevelListDrawable和StateListDrawable, 依旧贴下13种Drawable的导图:
1.LayerDrawable
层图形对象,包含一个Drawable数组,然后按照数组对应的顺序来绘制他们,索引 值最大的Drawable会被绘制在最上层!虽然这些Drawable会有交叉或者重叠的区域,但 他们位于不同的层,所以并不会相互影响,以<layer-list>作为根节点!
相关属性如下:
使用示例:
运行效果图:
代码实现:
非常简单,结合前面学习的shapeDrawable和ClipDrawable:
layerList_one.xml
=====>>==></item></layer-list>
然后在布局文件中添加一个Seekbar,内容如下:
<SeekBarandroid:layout_width=”match_parent”android:layout_height=”wrap_content”android:indeterminateDrawable=”@android:drawable/progress_indeterminate_horizontal”android:indeterminateOnly=”false”android:maxHeight=”10dp”android:minHeight=”5dp”android:progressDrawable=”@drawable/layerlist_one”android:thumb=”@drawable/shape_slider” />
卧槽,没了?对的,就是这么点东西~说了是层图形对象,我们还可以弄个层叠图片的效果:
运行效果图:
实现代码:
层叠图片的layerlist_two.xml:
=”http://schemas.android.com/apk/res/android”><item><bitmap><itemandroid:left=”25dp”android:top=”25dp”><bitmap><itemandroid:left=”50dp”android:top=”50dp”><bitmap></layer-list>
然后在activity_main.xml里加个ImageView,内容如下:
<ImageView=”@drawable/layerlist_two”/>
简单好用,还等什么,快快应用到你的项目中吧~
2.TransitionDrawable
LayerDrawable的一个子类,TransitionDrawable只管理两层的Drawable!两层!两层! 并且提供了透明度变化的动画,可以控制一层Drawable过度到另一层Drawable的动画效果。 根节点为<transition>,记住只有两个Item,多了也没用,属性和LayerDrawable差不多, 我们需要调用startTransition方法才能启动两层间的切换动画; 也可以调用reverseTransition()方法反过来播放:
使用示例:
运行效果图:
实现代码:
在res/drawable创建一个TransitionDrawable的xml文件
===”@mipmap/ic_bg_meizi2″/></transition>
然后布局文件里加个ImageView,然后把src设置成上面的这个drawable 然后MainActivity.java内容如下:
{private ImageView img_show;(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);img_show = (ImageView) findViewById(R.id.img_show);TransitionDrawable td = (TransitionDrawable) img_show.getDrawable();td.startTransition(3000);//你可以可以反过来播放,使用reverseTransition即可~//td.reverseTransition(3000);}}
另外,如果你想实现:多张图片循环的淡入淡出的效果 可参考:Android Drawable Resource学习(七)、TransitionDrawable中的示例 很简单,核心原理就是:handler定时修改Transition中两个图片!
3.LevelListDrawable
用来管理一组Drawable的,我们可以为里面的drawable设置不同的level, 当他们绘制的时候,会根据level属性值获取对应的drawable绘制到画布上,,根节点 为:<level-list>他并没有可以设置的属性,我们能做的只是设置每个<item> 的属性!
item可供设置的属性如下:
使用示例:
运行效果图:
代码实现:
通过shapeDrawable画圆,一式五份,改下宽高即可:
shape_cir1.xml:
===>
接着到LevelListDrawable,这里我们设置五层:
level_cir.xml:
======>
最后MainActivity写如下代码:
{private ImageView img_show;private LevelListDrawable ld;private Handler handler = new Handler() {(Message msg) {if (msg.what == 0x123) {if (ld.getLevel() > 10000) ld.setLevel(0);img_show.setImageLevel(ld.getLevel() + 2000);}}};(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);img_show = (ImageView) findViewById(R.id.img_show);ld = (LevelListDrawable) img_show.getDrawable();img_show.setImageLevel(0);new Timer().schedule(new TimerTask() {() {handler.sendEmptyMessage(0x123);}}, 0, 100);}}
也很简单,一个Timer定时器,handler修改level值~
4.StateListDrawable 生活若剥去理想、梦想、幻想,那生命便只是一堆空架子