ClipDrawable

作者: 难得糊涂与君勉 | 来源:发表于2018-01-13 13:36 被阅读25次
概述

其他Draw文章参考:
Android中Drawable整体介绍

前言

Drawable根据Drawable的当前级别值剪切另一个Drawable。 您可以控制Drawable的子对象的宽度和高度,以及重力来控制放置在整个容器中的位置。 通常通过使用setLevel()增加drawable的级别来实现诸如进度条之类的东西。

在 XML 文件中定义的对其他可绘制对象进行裁剪(根据其当前级别)的可绘制对象。您可以根据级别以及用于控制其在整个容器中位置的重力,来控制子可绘制对象的裁剪宽度和高度。通常用于实现进度栏之类的项目。

注意

默认级别为 0,即完全裁剪,使图像不可见。当级别为 10,000 时,图像不会裁剪,而是完全可见。

这边涉及到了一个裁剪方向与裁剪的位置,比如设置left,就是将对象在容器左边缘,那么就是裁剪的右边的
,如果方向是水平的话,可以达到一步步展示图片的效果。 如果是vertical 加 left属性的话,你设置成动态改变level水平,你会发现是从中间最开始出来的,加的left属性,再删除掉时候也是从中间开始出来,

所谓的裁剪,默认的是0,那么被处理的图片就看不见,level越来越高,那么,可以展示的图片就越来越多了。裁剪的意思:裁掉的你就看不见了。

增大级别可减少裁剪量并慢慢显示图像。此处的级别为 7000:

如果是静态的使用,感觉没啥意思,但是如果是动态的修改level,那么就会出现动态效果了。

做成动态效果之后,会有不一样的感觉。也就是说不一定通过动画就可以实现。

语法

<?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"] />

<clip>

定义裁剪可绘制对象。这必须是根元素。
属性:
xmlns:android
字符串。必备。定义 XML 命名空间,其必须是 "http://schemas.android.com/apk/res/android"。

android:drawable

可绘制对象资源。必备。引用要裁剪的可绘制对象资源。

android:clipOrientation

关键字。裁剪方向。
可以选择:

horizontal : 水平裁剪可绘制对象
vertical : 垂直裁剪可绘制对象

android:gravity

关键字。指定可绘制对象中要裁剪的位置。
必须是以下一个或多个(用 '|' 分隔)常量值:


参照表

测试

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

XML文件中

  <ImageView
        android:id="@+id/imageView_test"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="70dp"
        android:background="@drawable/clip_drawable"/>

代码中:

        ImageView imageView = (ImageView) findViewById(R.id.imageView_test);
        ClipDrawable clipDrawable = (ClipDrawable) imageView.getBackground();
        clipDrawable.setLevel(5000);

效果图:


水平方向剪切了一半

相关文章

网友评论

    本文标题:ClipDrawable

    本文链接:https://www.haomeiwen.com/subject/wgqcoxtx.html