Android ClipDrawable

Clip 可以译为剪的意思,我们可以把 ClipDrawable 理解为从位图上剪下一个部分

Android 中的进度条就是使用 ClipDrawable 来实现的,它根据设置 level 的值来决定剪切 区域的大小

ClipDrawable 根节点是 <clip>

属性 说明
android:clipOrietntion 设置剪切的方向,可以设置水平和竖直2个方向
android:gravity 从那个位置开始裁剪
android: drawable 引用的 drawable 资源,为空的话需要有一个 Drawable 类型的子节点

范例


  1. 创建一个 空的 Android 项目 cn.twle.android.ClipDrawable

  2. 下载 /static/i/meimei.jpg 并把图片放到 res/drawable 目录

  3. 定义一个 ClipDrawable 资源

    red/drawable/clip_image.xml

    <?xml version="1.0" encoding="utf-8"?>
    <clip xmlns:android="http://schemas.android.com/apk/res/android"
        android:clipOrientation="horizontal"
        android:drawable="@drawable/meimei"
        android:gravity="left" />
    
  4. 修改 activity_main.xml 添加一个 ImageView

    android:src 设置为 clipDrawable @drawable/clip_image

    注意:是 src ,如果设置 android:background 会报错

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <ImageView
            android:id="@+id/img_show"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scaleType="center"
            android:src="@drawable/clip_image" />
    
    </LinearLayout>
    
  5. 修改 MainActivity.java 通过代码修改 ClipDrawable 的 level 的值

    Level的值是 0~10000

    package cn.twle.android.clipdrawable;
    
    import android.graphics.drawable.ClipDrawable;
    import android.os.Handler;
    import android.os.Message;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.ImageView;
    
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class MainActivity extends AppCompatActivity {
    
        ClipDrawable cd;
    
        private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 0x123) {
                    cd.setLevel(cd.getLevel() + 500);
                }
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ImageView img_show = (ImageView) findViewById(R.id.img_show);
    
            // 核心实现代码
            cd = (ClipDrawable) img_show.getDrawable();
            final Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    handler.sendEmptyMessage(0x123);
                    if (cd.getLevel() >= 10000) {
                        timer.cancel();
                    }
                }
            }, 0, 300);
        }
    }
    

Android 基础教程

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.