Android 资源简介(四) ClipDrawable

ClipDrawable 代表从其他位图上截取的一部分图片内容。

在 XML 中定义 ClipDrawable 对象使用 <clip> 元素,该元素可以包含如下的属性:

  1. android:drawable:指定作为 ClipDrawable 元素的截取源的 Drawable 对象;
  2. android:clipOrientation:指定截取的方向,可以设置水平或者垂直截取;
  3. android:gravity:指定截取时的对齐方式。

使用 ClipDrawable 对象时可以调用 setLevel(int level) 方法来设置截取的区域的大小,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);
    }
}

上面示例的运行效果如下:

《Android 资源简介(四) ClipDrawable》 显示效果

参考文献:《疯狂Android讲义(第2版)》

    原文作者:赵者也
    原文地址: https://www.jianshu.com/p/231366a2069c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞