ClipDrawable主要的运用用于从其他位图上截取一个“图片片段”。
它在XML的中的根元素为 < clip…>
首先来让我们看看效果吧。
制作时,
第一步,程序需先定义ClipDrawable对象
在res/drawable下定义一个xml文件,可取名为my_clip.xml
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/ic_launcher"
android:clipOrientation="horizontal"
android:gravity="center">
</clip>
说明:其中可指定三个属性
android:drawable:指定截取的Drawable对象,也就是你所要展示的原来的图片资源
android:clipOrientation:指定截取方向,可设置为水平截取或者垂直截取
android:gravity:指定截取时的对齐方式。
第二步则要在ImageView中运用刚才定义的ClipDrawable对象
如下面的在activity_main.xml中的ImageView中运用。
<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<ImageView
android:id="@+id/image"
android:src="@drawable/my_clip"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
第三步也就可以在MainActivity中设定一个定时器Timer来设置慢慢展开图片的动画效果了。
setContentView(R.layout.activity_main);
ImageView imageView = (ImageView) findViewById(R.id.image);
//获取图片所显示的ClipDrawable对象
final ClipDrawable drawable = (ClipDrawable) imageView.getDrawable();
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//如果该消息是本程序所发送的
if (msg.what == 0x1233) {
//修改ClipDrawable的level值
drawable.setLevel(drawable.getLevel() + 200);
}
}
};
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Message msg = new Message();
msg.what = 0x1233;
//发送消息,通知应用修改ClipDrawable对象的level值
handler.sendMessage(msg);
//取消定时器
if (drawable.getLevel() >= 10000) {
timer.cancel();
}
}
}, 0, 300);
}
到此一个慢慢展开的图片的效果就做出来了。