canvas教程

领略千变万化的Android Drawable (二)

字号+ 作者:H5之家 来源:H5之家 2017-02-15 08:03 我要评论( )

领略千变万化的Android Drawable (二)

领略千变万化的Android Drawable (一)

hello,上篇我们已经分析6种Drawable的使用方法,本篇咱们就继续剩下的Drawable~,闲话莫多说,那就直接开始吧。

7、TransitionDrawable

很多时候我们在实现渐变的动画效果时,都会使用到animation,但实际上我们有既简单又完美的解决方法,没错,它就是TransitionDrawable啦,TransitionDrawable用于实现两个Drawable之间的淡入淡出的效果,它对应的是<transition&gt标签;其语法如下:



<?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
图像距离左边的距离

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Canvas使用技巧 相关文章

    Canvas使用技巧 相关文章

    2017-02-14 08:00

  • 调用android 自带的DownloadProvider遇到的有关问题

    调用android 自带的DownloadProvider遇到的有关问题

    2017-02-11 09:02

  • 轻松理解Android的SurfaceView控件

    轻松理解Android的SurfaceView控件

    2017-02-09 18:03

  • 【自定义控件系列一】android画图类

    【自定义控件系列一】android画图类

    2017-02-07 13:02

网友点评
s