Android的Drawable
1.获取Drawable的内部宽\高:getIntrinsicHeight/Width。但是并不是所有Drawable都有内部宽高(比如说一个颜色形成的宽高,Drawable的宽高不等于大小,大小是根据VIew的大小而定的)
2.BitmapDrawable
作用:引用原始图片,但是附加各种渲染属性。
3.ShapeDrawable
使用:以前有分析过,就不分析了。
注意:<gradient>与<solid>冲突无法同时使用。<stroke>中只要dashWidth和dashGap有一个为0则虚线效果就不生效。
4.LayerDrawable
使用:以前有分析过,就不分析了
5.StateDrawable
使用:以前有分析过,就不分析了
6.LevelListDrawable
作用:当每个等级不同,使用不同的drawable。
语法:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<level-list> <item android:drawable="@drawable/resource" android:maxLevel="integer" android:minLevel="integer"/> </level-list>
详解:每个<item>中装载drawable并设置最小和最大等级,当它作为View的背景时,通过Drawable的setLevel()方法设置不同等级,当等级在某个<item>的最小最大范围内的时候则选定该<item>并切换drawable(所以说等级最好不好重叠)。作为ImageView的src的时候则使用imageView.setImageLevel()来设置。
注:Drawable的等级时候范围的在0~10000之内
7.TranslationDrawable
作用:可以通过调用startTransition()和reverseTransition()实现两张图片的切换。
使用:实现淡入淡出的效果
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!--只能是两张图,两张图以上的图不显示--> <transition xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@mipmap/ic_launcher"/> <item android:drawable="@mipmap/test1"/> </transition>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.maikefengchao.circleview.MainActivity"> <ImageView android:id="@+id/main_iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/translation_img"/> </LinearLayout>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mIvShow = (ImageView)findViewById(R.id.main_iv); TransitionDrawable transition = (TransitionDrawable)mIvShow.getDrawable(); transition.startTransition(1000); //根据测试说明,第二章图以淡入的形式显示,只是覆盖第一张图,第一张图并未消失 }
8.InsetDrawable
作用:将其他Drawable内嵌到自己当中,当一个View希望自己的背景比自己的实际区域小的时候。
使用:设置缩小上下左右距离
9.ScaleDrawable
作用:根据等级缩放比例
使用:通过百分比设置scaleHeight/Width,但是同时还需要在java代码中用drawble.setLevel()设置其Level属性,因为drawable的level为0的时候不显示,根据P258页的源码可知。
同时level越大则内部的drawble看起来就越大,level最大等级是10000。
注意:根据自己的Level指定Drawable的缩放比例
10.ClipDrawable
作用:裁剪
使用:以前有
参考:http://blog.csdn.net/wode_dream/article/details/38584693
11.自定义Drawable
①、继承Drawable ②、重写抽象方法
自定义View:http://blog.csdn.net/lmj623565791/article/details/43752383