安卓中的drawable资源位我们在开发过程中提供了很大的便利之处,所以在此要做一下小小的总结。
一.StateListDrawable
1,用于组织多个Drawable对象
指定selector,每一个状态的Drawable被定义到一个item中
2,主要的属性
android:state_activated 已激活状态
android:state_active 是否处于激活
android:state_checkable 是否处于勾选
android:state_checked 已勾选
android:state_enabled 是否可用
android:state_first 是否处于开始
android:state_focused 是否已得焦点
android:state_last 是否处于结束
android:state_middle 是否处于中间
android:state_pressed 是否处于已按下
android:state_selected 是否处于已选中状态
android:state_window_focused 是否窗口已获得焦点
在drawable中的xml文件
1 23 4 - 5
- 6
- 7
- 8 9
在layout的xml中引用
android:drawableTop="@drawable/tab_address"
二.LayerDrawable
使用LayoutDrawable要在drawable下的layer-list标签中使用
drawable中配置的文件,seek.xml
1 23 4 5 - 8 9 10 11
14 15
seek_image.xml
1 23 4 5 - 6
10 11 129 15 18 19 20 21 24 27 28 29
seek_image.xml中没有设置android:gravity="center"的效果与配置了的效果对比
layout中xml文件
16 7
三.ShapeDrawable
1,根标签使用sharp,并且在根标签中药定义sharp的类型,
- rectangle---矩阵,这也是默认的sharp
- oval--------椭圆
- line --------一条水平的直线,这个sharp必须使用<stroke/>元素来定义这个线的宽度
- ring--------圆环
实例:<shape xmlns:android=""
android:shape="rectangle" >2,sharp中的属性
- corners是为Shape创建一个圆角,只有shape是rectangle时候才使用。
- gradient是设置渐变效果的
- padding是 内容与视图边界的距离
- size是sharp的大小
- solid是用来填充sharp的纯色
- stroke是这个shape使用的笔画,当android:shape="line"的时候,必须设置改元素。
drawabl文件中,sharp1.xml
1 24 5 6 10 11 12 13 17 18
sharp2.xml
1 24 5 9 10
layout中应用
17
效果图:
四,clipDrawable
drawable中的配置文件 , clip.xml
1 26 7 8
layout文件中引用配置文件
java代码:
1 import java.util.Timer; 2 import java.util.TimerTask; 3 4 import android.annotation.SuppressLint; 5 import android.app.Activity; 6 import android.graphics.drawable.Drawable; 7 import android.os.Bundle; 8 import android.os.Handler; 9 import android.os.Message;10 import android.view.Window;11 import android.widget.ImageView;12 13 public class MainActivity extends Activity {14 private static final int TAG=1;15 @SuppressLint("HandlerLeak")16 @Override17 protected void onCreate(Bundle savedInstanceState) {18 super.onCreate(savedInstanceState);19 requestWindowFeature(Window.FEATURE_NO_TITLE);20 setContentView(R.layout.activity_main);21 ImageView image=(ImageView) findViewById(R.id.imageView1);22 获取图片所显示的ClipDrawble对象23 final Drawable drawable = image.getDrawable();24 25 //用Handler跟新消息26 final Handler handler=new Handler(){27 @Override28 public void handleMessage(Message msg) {29 //设置drawable的level值30 drawable.setLevel(drawable.getLevel()+200);31 super.handleMessage(msg);32 }33 };34 35 final Timer timer=new Timer();36 timer.scheduleAtFixedRate(new TimerTask() {37 38 @Override39 public void run() {40 Message msg=new Message();41 msg.what=TAG;42 handler.sendMessage(msg);43 //level的取值为0-10000,大于其值就取消定时器44 if (drawable.getLevel()>10000) {45 timer.cancel();46 }47 }48 }, 0, 300);49 50 }51 52 }
效果图展示:
五,AnimationDrawable
此资源是在res下的anim文件夹中配置xml文件的
animation的动画效果有四种:
- alpha ------>渐变透明度动画效果
- scale------->渐变缩放动画效果
- translate--->位置的移动效果
- rotate------>旋转效果
1,alpha
android:fromAlpha="0.1" android:toAlpha="1.0" android:duration="3000" />
<!-- 透明度控制动画效果 alpha
浮点型值: fromAlpha 属性为动画起始时透明度 toAlpha 属性为动画结束时透明度 说明: 0.0表示完全透明 1.0表示完全不透明 以上值取0.0-1.0之间的float数据类型的数字长整型值:
duration 属性为动画持续时间 说明: 时间以毫秒为单位 -->2,scale
1 2
<!-- 尺寸伸缩动画效果 scale
属性:interpolator 指定一个动画的插入器 在我试验过程中,使用android.res.anim中的资源时候发现 有三种动画插入器: accelerate_decelerate_interpolator 加速-减速 动画插入器 accelerate_interpolator 加速-动画插入器 decelerate_interpolator 减速- 动画插入器 其他的属于特定的动画效果 浮点型值:fromXScale 属性为动画起始时 X坐标上的伸缩尺寸
toXScale 属性为动画结束时 X坐标上的伸缩尺寸fromYScale 属性为动画起始时Y坐标上的伸缩尺寸
toYScale 属性为动画结束时Y坐标上的伸缩尺寸说明:以上四种属性值
0.0表示收缩到没有 1.0表示正常无伸缩 值小于1.0表示收缩 值大于1.0表示放大pivotX 属性为动画相对于物件的X坐标的开始位置
pivotY 属性为动画相对于物件的Y坐标的开始位置说明:以上两个属性值 从0%-100%中取值
50%为物件的X或Y方向坐标上的中点位置长整型值:
duration 属性为动画持续时间 说明: 时间以毫秒为单位布尔型值:
fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用 -->3,translate
1 2
<!-- translate 位置转移动画效果
整型值: fromXDelta 属性为动画起始时 X坐标上的位置 toXDelta 属性为动画结束时 X坐标上的位置 fromYDelta 属性为动画起始时 Y坐标上的位置 toYDelta 属性为动画结束时 Y坐标上的位置 注意: 没有指定fromXType toXType fromYType toYType 时候, 默认是以自己为相对参照物 长整型值: duration 属性为动画持续时间 说明: 时间以毫秒为单位 -->4,rotate
1 2
<!-- rotate 旋转动画效果
属性:interpolator 指定一个动画的插入器 在我试验过程中,使用android.res.anim中的资源时候发现 有三种动画插入器: accelerate_decelerate_interpolator 加速-减速 动画插入器 accelerate_interpolator 加速-动画插入器 decelerate_interpolator 减速- 动画插入器 其他的属于特定的动画效果浮点数型值:
fromDegrees 属性为动画起始时物件的角度 toDegrees 属性为动画结束时物件旋转的角度 可以大于360度说明:
当角度为负数——表示逆时针旋转 当角度为正数——表示顺时针旋转 (负数from——to正数:顺时针旋转) (负数from——to负数:逆时针旋转) (正数from——to正数:顺时针旋转) (正数from——to负数:逆时针旋转)pivotX 属性为动画相对于物件的X坐标的开始位置
pivotY 属性为动画相对于物件的Y坐标的开始位置说明: 以上两个属性值 从0%-100%中取值
50%为物件的X或Y方向坐标上的中点位置长整型值:
duration 属性为动画持续时间 说明: 时间以毫秒为单位 -->注意:
以上四种效果是单独使用的,如果想叠加效果在可以在set标签下设置多种效果
1 23 4 8 14 15
最后在java代码中开启我们的动画
1 import android.app.Activity; 2 import android.os.Bundle; 3 import android.view.Window; 4 import android.view.animation.Animation; 5 import android.view.animation.AnimationUtils; 6 import android.widget.ImageView; 7 8 public class AnimationActivity extends Activity { 9 @Override10 protected void onCreate(Bundle savedInstanceState) {11 super.onCreate(savedInstanceState);12 requestWindowFeature(Window.FEATURE_NO_TITLE);13 setContentView(R.layout.activity_animation);14 final ImageView image=(ImageView) findViewById(R.id.imageView1);15 //加载动画资源16 Animation animation = AnimationUtils.loadAnimation(this, R.anim.alpha);17 //设置动画结束后保留结束的状态18 animation.setFillAfter(true);19 //让图片开始动画20 image.startAnimation(animation);21 }22 23 }
动画效果截图不方便,就不留图片了。