一.性质
可直接使用.png、.jpg、.gif、9.png等图片作为资源,也可使用多种XML文件作为资源。(就是这些资源都能生成Drawable对象)。并对XML文件作出相关处理
二.XMLDrawable
1.StateListDrawable
作用:StateListDrawable对象所显示的Drawable对象会随着目标组件状态的改变而改变
组成:
根元素
子元素
android:state_xxx:状态
举例:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="false" android:drawable="@mipmap/start"/> <item android:state_pressed="true" android:drawable="@mipmap/start_down"/> selector>
相关目标组件的状态不列出来
2.LayerDrawable
作用:可包含一个Drawable数组,系统会按照Drawable对象的数组顺序绘制,索引越大越被绘制在上层
根元素:
子元素的属性:android:drawable 作为LayerDrawable的Drawable对象
android:id 为Drawable对象指定标识符
android:buttom|top...等 指定Drawable的绘制位置
实例1:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@mipmap/p_1" android:id="@android:id/background"/> <item android:drawable="@mipmap/p_2" android:id="@android:id/progress"/> layer-list>
实例2:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <bitmap android:src="@mipmap/p_3" android:gravity="center"/> item> <item> <bitmap android:src="@mipmap/p_4" android:gravity="center"/> item> layer-list>
3.ShapeDrawable
作用:设置一个基本的几何图形(矩形、圆形、线条灯)
根元素:
子元素:
详情参照:http://blog.csdn.net/lonelyroamer/article/details/8254592
实例:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <corners android:radius="3dp"/> <padding android:left="7dp" android:right="7dp" android:bottom="7dp" android:top="7dp"/> <gradient android:angle="45" android:startColor="#0000" android:endColor="#ffff"/> shape>
4.ClipDrawable
作用:从Drawable上截取一个“图片片段”
根元素:
根元素属性: android:drawable: 选定Drawable对象
android:clipOrientation:指定截取方向
android:gravity:从什么地方开始截取
总结:选定图片并选择方向与位置截取图片
使用:从java中获取ClipDrawable并用setLevel()改变截取大小 //setLevel()只能从0~10000
<clip xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@mipmap/start" android:clipOrientation="horizontal" android:gravity="center"> clip>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.chen.android.test.MainActivity"> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/test_clip"/> LinearLayout>
/*实现图片渐渐展开的效果*/ public class MainActivity extends AppCompatActivity { int data = 0; int what = 0X11; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView img = (ImageView)findViewById(R.id.imageView); //ImageView.getDrawable()获取的是当前控件里的图片,返回的是Drawable类型,还有说明Drawable对象可随意变成子对象并调用子对象的方法 final ClipDrawable clipDrawable = (ClipDrawable)img.getDrawable(); //创建Handler等待计时器传送的信息,使图片扩展 final Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what == what){ clipDrawable.setLevel(data);//扩大截取的图片面积 data += 200; } } }; //创建计时器 final Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { if (data >= 10000){ timer.cancel(); } mHandler.obtainMessage(what).sendToTarget(); } },0,300); } }
5.AnimationDrawable
简介:放在res/anim下,支持逐帧动画和补间动画
根元素:
参数:@android:anim/ 为开头 选择 linear_interpolator:匀速变换 | accelerate_interpolar:加速变换 | decelerate_interpolator:减速变换
android:shareInterpolator= "true|false" :是否让资源的interpolator与根元素相同
android:duration="时间":定义持续时间
子元素(同样可以设置duration):
注意:利用android:fillAfter="true|false":设置保留后的状态(哪个状态想保留就用这个,如果都像就放在
使用:利用AnimationUtils的静态方法loadAninmation(Context context,int resId)
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/linear_interpolator" android:shareInterpolator="true" android:fillAfter="true"> <alpha android:fromAlpha="50.0" android:toAlpha="100.0" /> <scale android:pivotX="50%" android:pivotY="50%" android:fromXScale="1.0" android:fromYScale="1.0" android:toXScale="1.5" android:toYScale="1.5" android:duration="3000" /> <translate android:fromXDelta="30" android:toXDelta="300" android:fromYDelta="40" android:toYDelta="90" android:duration="3000"/> set>
/*实现动画*/ public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImageView img = (ImageView)findViewById(R.id.imageView); /*利用工具类获取对象*/ Animation animation= AnimationUtils.loadAnimation(this,R.anim.test_animation); /*将动画附加在图片上*/ img.startAnimation(animation); } }