Drawable基础知识总结----drawable标签LevelList、inset、scale、clip的使用

本文详细介绍了Android中Drawable的使用,包括LevelList的层级控制,inset的内边距调整,scale的缩放功能,以及clip的裁剪操作。通过示例代码和布局展示,帮助开发者更好地理解和应用这些特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.LevelList

布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/img_view"
        android:scaleType="centerInside"
        android:layout_width="381dp"
        android:layout_height="216dp" />
</LinearLayout>

activity代码:

public class ActLevelList extends AppCompatActivity {

    private static ImageView imgView;

    static Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch( msg.what){
                case 1:
                case 8:
                case 4:
                    imgView.getDrawable().setLevel( 1);
                    break;
                case 7:
                case 5:
                case 3:
                    imgView.getDrawable().setLevel( 0);
                    break;
                case 6:
                case 2:
                    imgView.getDrawable().setLevel( 2);
                    break;
            }
        }
    };

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_act_levellist);

        imgView = (ImageView) this.findViewById( R.id.img_view);

        imgView.setImageResource( R.drawable.level_list_drawable);
        imgView.setImageLevel( 0);

        for( int i = 1; i < 9; i++ ){
            handler.sendEmptyMessageDelayed( i, i * 2000);
        }
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        finish();
    }
}

2.inset

drawable文件inset_drawable:

<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
    android:insetBottom="10dp"
    android:drawable="@drawable/img1"
    android:insetTop="10dp"
    android:insetLeft="10dp"
    android:insetRight="10dp">

</inset>

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:background="@drawable/inset_drawable"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</LinearLayout>

activity代码:

public class ActInset extends AppCompatActivity{

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_act_inset);
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        finish();
    }
}

3.scale

drawable文件scale_drawable_for_big_number:

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/img2"
    android:scaleHeight="70%"
    android:scaleWidth="70%"
    android:scaleGravity="center">

</scale>

drawable文件scale_drawable_for_small_number:

<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/img2"
    android:scaleHeight="30%"
    android:scaleWidth="30%"
    android:scaleGravity="center">

</scale>

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="vertical">
            <TextView
                android:layout_marginTop="30dp"
                android:gravity="center"
                android:textSize="20sp"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="android:scaleHeight=70%  android:scaleWidth=70%"/>
            <ImageView
                android:id="@+id/img_view_for_big_number"
                android:scaleType="centerInside"
                android:layout_width="381dp"
                android:layout_height="216dp"
                android:background="@drawable/scale_drawable_for_big_number"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_marginTop="30dp"
                android:textSize="20sp"
                android:text="android:scaleHeight=30%  android:scaleWidth=30%"/>
            <ImageView
                android:id="@+id/img_view_for_small_number"
                android:scaleType="centerInside"
                android:layout_width="381dp"
                android:layout_height="216dp"
                android:background="@drawable/scale_drawable_for_small_number"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_marginTop="30dp"
                android:textSize="20sp"
                android:text="宽高缩放比例50%  level=1"/>
            <ImageView
                android:id="@+id/img_view_for_level1"
                android:scaleType="centerInside"
                android:layout_width="381dp"
                android:layout_height="216dp"
                android:background="@drawable/scale_drawable_for_small_number"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_marginTop="30dp"
                android:textSize="20sp"
                android:text="宽高缩放比例50%  level=5000"/>
            <ImageView
                android:id="@+id/img_view_for_level5000"
                android:scaleType="centerInside"
                android:layout_width="381dp"
                android:layout_height="216dp"
                android:background="@drawable/scale_drawable_for_small_number"/>

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:layout_marginTop="30dp"
                android:textSize="20sp"
                android:text="宽高缩放比例50%  level=10000(原图大小)"/>
            <ImageView
                android:id="@+id/img_view_for_level10000"
                android:scaleType="centerInside"
                android:layout_marginBottom="30dp"
                android:layout_width="381dp"
                android:layout_height="216dp"
                android:background="@drawable/scale_drawable_for_small_number"/>
        </LinearLayout>
    </ScrollView>

</LinearLayout>

activity代码:

public class ActScale extends AppCompatActivity {


    @BindView(R.id.img_view_for_big_number)
    ImageView imgViewForBigNumber;
    @BindView(R.id.img_view_for_small_number)
    ImageView imgViewForSmallNumber;
    @BindView(R.id.img_view_for_level1)
    ImageView imgViewForLevel1;
    @BindView(R.id.img_view_for_level5000)
    ImageView imgViewForLevel5000;
    @BindView(R.id.img_view_for_level10000)
    ImageView imgViewForLevel10000;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_act_scale);
        ButterKnife.bind(this);

        ScaleDrawable scaleDrawableForBigNumber = (ScaleDrawable) imgViewForBigNumber.getBackground();
        scaleDrawableForBigNumber.setLevel(1);

        ScaleDrawable scaleDrawableForSmallNumber = (ScaleDrawable) imgViewForLevel1.getBackground();
        scaleDrawableForSmallNumber.setLevel(1);

        ScaleDrawable scaleDrawableForLevel1 = (ScaleDrawable) imgViewForSmallNumber.getBackground();
        scaleDrawableForLevel1.setLevel(1);

        ScaleDrawable scaleDrawableForLevel5000 = (ScaleDrawable) imgViewForLevel5000.getBackground();
        scaleDrawableForLevel5000.setLevel(5000);

        ScaleDrawable scaleDrawableForLevel10000 = (ScaleDrawable) imgViewForLevel10000.getBackground();
        scaleDrawableForLevel10000.setLevel(10000);
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        finish();
    }
}

4.clip

drawable文件clip_drawable:

<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/img3"
    android:clipOrientation="horizontal"
    android:gravity="center">

</clip>

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/img_view"
        android:layout_marginTop="15dp"
        android:layout_width="381dp"
        android:layout_height="216dp"
        android:background="@drawable/clip_drawable"/>

    <ImageView
        android:id="@+id/img_view_for_level"
        android:layout_width="381dp"
        android:layout_height="216dp"
        android:layout_marginTop="15dp"
        android:scaleType="fitStart"
        android:src="@drawable/clip_drawable"/>
</LinearLayout>

activity代码:

public class ActClip extends AppCompatActivity {

    @BindView(R.id.img_view)
    ImageView imgView;

    @BindView(R.id.img_view_for_level)
    ImageView imgViewForLevel;
    private final static int IS_CONTUNUE=0x22;
    private  ClipDrawable drawable;
    Timer timer = new Timer();

    final Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {

            if (msg.what == IS_CONTUNUE) {
                /**setlevel()设置图片截取的大小
                 * 修改ClipDrawable的level值,level值为0--10000;
                 * 10000:截取图片大小为空白,0:截取图片为整张图片;
                 */
                drawable.setLevel(drawable.getLevel() + 200);
            }
        }

    };

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_act_clip);
        ButterKnife.bind(this);

        //ClipDrawable的等级范围是[0,10000],而且level越大裁剪区域越少,
        // 当level=10000时,表示不裁剪,我们在这里设置了level为6000则表示裁剪40%的区域
        ClipDrawable clipDrawable = (ClipDrawable) imgView.getBackground();
        clipDrawable.setLevel(6000);

        //获取图片所显示的ClipDrawable对象
        drawable = (ClipDrawable) imgViewForLevel.getDrawable();
        //定时器
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                Message msg = new Message();
                msg.what = IS_CONTUNUE;
                handler.sendMessage(msg);
                if (drawable.getLevel() >= 10000) {
                    timer.cancel();
                }
            }
        }, 0, 200);
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        finish();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值