ClipDrawable 代表從其他位圖上截取的一部分圖片內(nèi)容。
在 XML 中定義 ClipDrawable 對象使用 <clip> 元素,該元素可以包含如下的屬性:
- android:drawable:指定作為 ClipDrawable 元素的截取源的 Drawable 對象胀屿;
- android:clipOrientation:指定截取的方向,可以設(shè)置水平或者垂直截惹渍 ;
- android:gravity:指定截取時的對齊方式奖蔓。
使用 ClipDrawable 對象時可以調(diào)用 setLevel(int level) 方法來設(shè)置截取的區(qū)域的大小,level 取值為 0~10000吆鹤,為 0 時,截取的圖片為空沾凄,為 10000 時知允,截取整張圖片。
下面是一個簡單的使用示例保屯。
自定義的 ClipDrawable 對象:
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/girl04"
android:clipOrientation="vertical"
android:gravity="center" />
主布局文件的代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorGray"
android:orientation="vertical"
android:gravity="center_horizontal"
>
<ImageView
android:id="@+id/imageClip"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/test_clip"
/>
</LinearLayout>
主程序文件的代碼如下:
package com.toby.personal.testlistview;
import android.graphics.drawable.ClipDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends AppCompatActivity {
final private static String TAG = "Toby_Test";
final private static int MsgWhat = 20170406;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ImageView imageView = (ImageView) findViewById(R.id.imageClip);
final ClipDrawable clipDrawable = (ClipDrawable) imageView.getDrawable();
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == MsgWhat) {
clipDrawable.setLevel(clipDrawable.getLevel() + 200);
}
super.handleMessage(msg);
}
};
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Message msg = new Message();
msg.what = MsgWhat;
handler.sendMessage(msg);
if (clipDrawable.getLevel() >= 10000) {
timer.cancel();
}
}
}, 0, 300);
}
}
上面示例的運行效果如下:
顯示效果
參考文獻(xiàn):《瘋狂Android講義(第2版)》