其他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);
效果图: