【Android Drawable系列】- 多个Drawable

【Android Drawable系列】- 多个Drawable_第1张图片
Android Drawable系列

本文要说明的是可以使用多个drawable的drawble资源标签。

Layer list

layer-list可以管理一组drawable的标签,每个drawable都按文件中的顺序绘制,也就是列表中的最后一个会绘制在顶部。在layer-list中每个drawable需要使用表示。

先来看看例子:



    
    
    

这是实际效果:

【Android Drawable系列】- 多个Drawable_第2张图片

并没有什么属性,直接看看的属性


  • android:drawable:属性不用多说了,就是drawable资源的引用
  • android:id:可以为当前的设置资源id,可以通过LayerDrawable.findDrawableByLayerId()获取到对应的drawable对象
  • android:left|top|right|bottom:则是对应当前drawable显示的各个对应边的距离
  • android:gravityitem也是支持gravity的属性的

获取layer-list中的drawable代码如下:

final ImageView imageView = findViewById(R.id.image);
LayerDrawable drawable = (LayerDrawable) imageView.getDrawable();
Drawable layerDrawable1 = drawable.findDrawableByLayerId(R.id.layer_drawable_1);

另外,是支持双标签使用的,在之间也是可以是写drawable进行使用的,例如:



    
        
            
        
    

State list

使用不同的drawable来表示不同的状态,也就是我们平常使用的标签,配合标签组合使用。每个使用属性来表示所对应的状态,在状态变更时,会从上到下遍历的列表,会使用与当前状态匹配的第一个标签中的drawable,并不是最佳匹配。

首先看看selector有什么属性

  • android:visiable:样式是否可见
  • android:autoMirrored
  • android:constantSize:各个状态所显示的drawable大小是否相同,false表示不同,true表中所有的状态大小相同(以最大的为准)。默认为false
  • android:variablePadding:表示drawable的内边距会根据状态的变化而变化,设置为true时,你必须为不同的状态配置layout,但是通常不建议这么做。选择false时,内边距保持一致,所有状态中最大的内边距。默认为false
  • android:enterFadeDuration:表示样式淡入的时间,毫秒
  • android:exitFadeDuration:表示样式淡出的时间,毫秒

再来看看都有什么状态,这是compileSdkVersion 28联想出来的代码提示

【Android Drawable系列】- 多个Drawable_第3张图片
  • android:state_accelerated:drawable硬件加速的状态
  • android:state_activated:表示View或者parent被激活时设置为true
  • android:state_active:当view或者drawable激活时为true
  • android:state_checkable:表示是否可以选中
  • android:state_drag_can_accept:表示是否可以drag或drop
  • android:state_drag_hovered:表示可以drag或drop的对象,光标是否悬停在该位置
  • android:state_checked:表示是否选中
  • android:state_enabled:表示是否可用
  • android:state_focused:表示非触摸模式下是否获得焦点
  • android:state_hovered:表示光标是否悬停在该位置
  • android:state_pressed:表示是否被按下
  • android:state_selected:表示是否被选中
  • android:state_window_focused:表示当前activity是否获得焦点显示在最前面

其中还是几个属性并没有找到具体是什么含义,也没有试出来



    
    
    
    

同样的,在使用时可以使用其他的drawable标签,还可以使animated-rotateanimated-selectoranimation-list

Level list

用于管理多个备用Drawable的drawable对象,使用setLevel()设置drawable的级别,根据设置的level显示符合在minLevel<= level <= maxLevel的的drawable。

item的属性

  • android:drawable:Drawable对象
  • android:maxLevel:level最大值,默认为0
  • android:minLevel:level最小值,默认为0


    
    

需要在java代码中使用setLevel或者setImageLevel来改变level的值

如果所设置的level值,在中找不到符合条件的将会显示成空白。显示的顺序是从上到下,符合minLevel<= level <= maxLevel条件的优先显示。

Transition drawable

TransitionDrawable是一个可以在两个drawable之间交叉淡出淡入的drawable对象。使用标签和标签,而标签不能超过两个。可以使用startTransition()开始变换也可以调用reverseTransition()还原.



    
    

具体java代码

ImageView imageView = findViewById(R.id.image);
TransitionDrawable drawable = (TransitionDrawable) imageView.getDrawable();
drawable.startTransition(300);
//drawable.reverseTransition(300);

的属性还支持android:idandroid:leftandroid:topandroid:rightandroid:bottom,用法和之前相同就不说了。

这是drawable资源文件的第三篇文章,到这里基础的就结束了,后续慢慢就开始做一些实际用法。

你可能感兴趣的:(【Android Drawable系列】- 多个Drawable)