ClipDrawable 代表从其他位图上截取的一个“图片片段”。
示例:
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scaleType="fitStart" android:src="@drawable/my_clip" /> </LinearLayout>
my_clip.xml
<?xml version="1.0" encoding="UTF-8"?> <clip xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/shuangta" android:clipOrientation="horizontal" android:gravity="center"> </clip>
因为 ClipDrawble 对象可调用 setLevel(int level)控制截取图片的部分,因此本示例只要设 置一个定时器,让程序不断调用 ClipDrawble 的 setLevel(int level)方法即可实现图片徐徐展开 的效果。
ClipDrawableTest.java
package org.crazyit.res; import java.util.Timer; import java.util.TimerTask; import org.crazyit.res.R; import android.app.Activity; import android.graphics.drawable.ClipDrawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.ImageView; /** * Description: * <br/>site: <a href="http://www.crazyit.org">crazyit.org</a> * <br/>Copyright (C), 2001-2014, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */ public class ClipDrawableTest extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.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); } }
ScreenShot:双塔图片逐渐从中间向两边展开。