代码改变世界

ClipDrawable 资源

2013-11-22 09:27  Andy Ge  阅读(593)  评论(0编辑  收藏  举报
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:双塔图片逐渐从中间向两边展开。