您的位置:首页 > 其它

使用(Drawable)资源———ClipDrawable资源

2013-11-23 14:12 519 查看
ClipDrawable代表从其他位图上截取的一个"图片片段"。在XML文件中定义ClipDrawable对象使用<clip.../>元素,该元素的语法为:

<?xml version="1.0" encoding="utf-8"?>
<clip
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
android:clipOrientation=["horizontal" | "vertical"]
android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"] />


上面的语法格式中可指定如下三个属性:

android:drawable:指定截取的源Drawable对象。

android:clipOrientation:指定截取方向,可设置水平截取或垂直截取。

android:gravity:指定截取时的对齐方式。

使用ClipDrawable对象时可调用setLevel(int level)方法来设置截取的区域大小,当level为0时,截取的图片片段为空;当level为10000时,截取整张图片。

下面以一个示例来说明ClipDrawable对象的用法。

实例:徐徐展开的风景

因为ClipDrawable对象可调用setLevel(int level)控制截取图片的部分,因此本示例只要设置一个定时器,让程序不断调用ClipDrawable的setLevel(int level)方法即可实现图片徐徐展开的效果。

程序先定义如下ClipDrawable对象。

程序清单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>


上面的程序控制从中间开始截取图片,截取方向为水平截取。接下来程序将通过一个定时器来定期修改ClipDrawable对象的level,即可实现图片徐徐展开的效果。

package com.example.studyresources;

import java.util.Timer;
import java.util.TimerTask;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.graphics.drawable.ClipDrawable;
import android.view.Menu;
import android.widget.ImageView;

public class ClipDrawableTest extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_clip_drawable_test);
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) {
// TODO Auto-generated method stub
//如果该程序是本程序所发送的
 if(msg.what==0x123)
{
//修改ClipDrawable的level值
drawable.setLevel(drawable.getLevel()+200);
}
}
};
final Timer timer=new Timer();
timer.schedule(new TimerTask(){

@Override
public void run() {
// TODO Auto-generated method stub
Message msg=new Message();
msg.what=0x123;
//发送消息,通知应用修改ClipDrawable对象的Level值
handler.sendMessage(msg);
//取消定时器

if(drawable.getLevel()>=10000)
{
timer.cancel();
}
}
}, 0,300);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.clip_drawable_test, menu);
return true;
}

}


运行上面的程序,将看到如图6.6所示的结果。



从图6.6所示的运行结果可以看出,通过使用这种徐徐展开的图片,用户会感觉就像进度条一样——实际上,实际应用中完全可以用这种ClipDrawable对象来实现图片进度条。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: