Drawable-详解

参考资料


目录

    1. 简介
    1. Drawable分类
    • 2.1) BitmapDrawable
    • 2.2) ShapeDrawable
    • 2.3) LayerDrawable
    • 2.4) StateListDrawable
    • 2.5) LevelListDrawable
    • 2.6) TransitionDrawable
    • 2.7) InsertDrawable
    • 2.8) ScaleDrawable
    • 2.9) ClipDrawable
    1. 自定义Drawable

1)简介

  • Drawable图像(可以在Canvas上进行绘制的抽象概念)。常见的颜色和图片都可以是一个Drawable。
    Drawable使用范围单一,一个是作为ImageView中图像显示,另一个就是作为View的背景。
  • Drawable是抽象类,是所有Drawable的基类
  • getIntrinsicWidth() 和 getIntrinsicHeight()可以获得Drawable的内部宽高,但不是所有Drawable都有此属性(图片有,颜色就没有。可用来Drawable转Bitmap),且此宽高不等同于它的大小,一般Drawable没有大小概念,当用作View的背景时,Drawable会被拉伸至View的大小

2)Drawable分类

2.1)BitmapDrawable

就是一张图片,也可以通过xml的方式描述




2.2)ShapeDrawable

新建文件~res/drawable/shape_test.xml


   
     //使用LevelListDrawable时就要设置为true。设为false时才有渐变效果  
      />
  
        //虚线的间隔  

//下面2个一般不怎么用,因为他们的功能控件本身也有
    
    


2.2)LayerDrawable

屏幕快照 2017-07-24 下午4.56.59.png

新建文件~res/drawable/layer_test.xml



    
        
            
        
    
    
        
            
        
    
    
        
            
        
    


2.4)StateListDrawable

对应于标签,常用于Button


   


2.5)LevelListDrawable

为了让ImageView根据条件显示不同的图片,常常会使用if判断。但有更简单的方法: 标签。Android的手机显示剩余电量就是用这个方法来显示不同图片的。
LevelListDrawable的level区间为 0~10000



ImageView level_view = (ImageView)findViewById(R.id.level_view);
level_view.getDrawable().setLevel(11);

    
    


2.6)TransitionDrawable

标签,实现两个Drawable之间的淡入淡出动画效果


TransitionDrawable.gif
 

TextView transition_view = (TextView) findViewById(R.id.transition_view);
TransitionDrawable drawable = (TransitionDrawable) transition_view.getBackground();
drawable.startTransition(2000);

    
    


2.7)InsertDrawable

对应标签,可以将其他Drawable内嵌到自己中,并可以四周留出一定间距。使用LayerDrawable可以实现相同效果。


2.8)ScaleDrawable

对应标签,可以根据自己的等级(level)将指定的Drawable缩放到一定比例
ScaleDrawable的level区间为 0~10000。0是不可见的。


ScaleDrawable.png


View scale_view = findViewById(R.id.scale_view);
ScaleDrawable drawable2 = (ScaleDrawable) scale_view.getBackground();
drawable2.setLevel(1);



2.9)ClipDrawable

对应标签,可以根据level来裁剪一个Drawable。
ClipDrawable的level区间为0~10000。 0表示完全裁剪,整个Drawable不可见了。10000表示不裁剪。


Drawable-详解_第1张图片
ClipDrawable.png


ImageView clip_view = (ImageView) findViewById(R.id.clip_view);
ClipDrawable drawable1 = (ClipDrawable) clip_view.getDrawable();
drawable1.setLevel(8000);

上述代码设置android:gravity="bottom"表示从顶部开始裁剪。level为8000表示裁剪了2000,即在顶部裁剪了20%的区域


3)自定义Drawable

注意:自定义Drawable无法在XML中引用。

你可能感兴趣的:(Drawable-详解)