领略千变万化的Android Drawable (一)
hello,上篇我们已经分析6种Drawable的使用方法,本篇咱们就继续剩下的Drawable~,闲话莫多说,那就直接开始吧。
7、TransitionDrawable很多时候我们在实现渐变的动画效果时,都会使用到animation,但实际上我们有既简单又完美的解决方法,没错,它就是TransitionDrawable啦,TransitionDrawable用于实现两个Drawable之间的淡入淡出的效果,它对应的是<transition>标签;其语法如下:
<?xml version="1.0" encoding="utf-8"?>
<transition
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:id="@[+][package:]id/resource_name"
android:top="dimension"
android:right="dimension"
android:bottom="dimension"
android:left="dimension" />
</transition>
<?xml version="1.0" encoding="utf-8"?><transitionxmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:drawable="@[package:]drawable/drawable_resource"android:id="@[+][package:]id/resource_name"android:top="dimension"android:right="dimension"android:bottom="dimension"android:left="dimension" /></transition>
语法中的属性比较简单,其中 android:top,android:bottom,android:left,android:right分别表示Drawable四周的偏移量。
android:id
资源ID,drawable资源的唯一标识。使用”@+id/name”方式来给这个item定义一个新的资源ID。可以使用View.findViewById()或者 Activity.findViewById()等方式检索和修改这个item。
同样,我们来看一个实例:
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/image1"/>
<item android:drawable="@drawable/image2" />
</transition>
<?xml version="1.0" encoding="utf-8"?><transition xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/image1"/><item android:drawable="@drawable/image2" /></transition>
引用如下:
ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@drawable/transition_drawable"
/>
ImageView android:id="@+id/image"android:layout_width="wrap_content"android:layout_height="wrap_content" android:layout_centerInParent="true" android:background="@drawable/transition_drawable"/>
通过它的startTransition和reverseTransition方法实现淡入淡出效果,代码如下:
TransitionDrawable drawable= (TransitionDrawable) imageView.getBackground();
drawable.startTransition(4000);
TransitionDrawable drawable= (TransitionDrawable) imageView.getBackground();drawable.startTransition(4000);
如果在imageView设置的src属性
ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/transition_drawable"
/>
ImageView android:id="@+id/image"android:layout_width="wrap_content"android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/transition_drawable"/>
代码控制为:
TransitionDrawable drawable= (TransitionDrawable) imageView.getDrawable();
drawable.startTransition(4000);
TransitionDrawable drawable= (TransitionDrawable) imageView.getDrawable();drawable.startTransition(4000);
最终效果:
最后我们给出代码实现的方式,比较简单,这里不过多分析:
ImageView imageView= (ImageView) findViewById(R.id.tranImage);Bitmap bitmap1= BitmapFactory.decodeResource(getResources(), R.drawable.image1);
Bitmap bitmap2= BitmapFactory.decodeResource(getResources(), R.drawable.image2);
final TransitionDrawable td = new TransitionDrawable(new Drawable[] {new BitmapDrawable(getResources(), bitmap1),
new BitmapDrawable(getResources(), bitmap2) });
imageView.setImageDrawable(td);
td.startTransition(4000);
ImageView imageView= (ImageView) findViewById(R.id.tranImage);Bitmap bitmap1= BitmapFactory.decodeResource(getResources(), R.drawable.image1);Bitmap bitmap2= BitmapFactory.decodeResource(getResources(), R.drawable.image2);final TransitionDrawable td = new TransitionDrawable(new Drawable[] {new BitmapDrawable(getResources(), bitmap1),new BitmapDrawable(getResources(), bitmap2) });imageView.setImageDrawable(td);td.startTransition(4000);
8、InsetDrawable
有时候我们可能需要为一个全屏的LinearLayout布局指定背景图,但我们不想让背景图充满屏幕,这时我们就需要使用到InsetDrawable了,InsetDrawable对应标签,它可以将其他Drawable内嵌到自己当中,并可以在四周预留出一定的间距。当我们希望View的背景比实际区域小时,就可以采用InsetDrawable来实现,个人认为这个效果并没有什么特殊之处,因为layerDrawable也是可以达到相同的预期效果的。其语法如下:
<?xml version="1.0" encoding="utf-8"?>
<inset
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
android:insetTop="dimension"
android:insetRight="dimension"
android:insetBottom="dimension"
android:insetLeft="dimension" />
<?xml version="1.0" encoding="utf-8"?><insetxmlns:android="http://schemas.android.com/apk/res/android"android:drawable="@drawable/drawable_resource"android:insetTop="dimension"android:insetRight="dimension"android:insetBottom="dimension"android:insetLeft="dimension" />
属性解释:
属性含义
android:insetTop
图像距离上边的距离
android:insetRight
图像距离右边的距离
android:insetBottom
图像距离底边的距离
android:insetLeft
图像距离左边的距离