注意:本篇文章是本人阅读相关文章所写下的总结,方便以后查阅,所有内容非原创,侵权删。
本篇文章内容来自于:
1.Android开发艺术探索 任玉刚
2.领略千变万化的Android Drawable (一)
目录
- ClipDrawable
--12.1 什么是ClipDrawable
--12.2 ClipDrawable语法/属性
--12.3 ClipDrawable使用案例
12. ClipDrawable
12.1 什么是ClipDrawable
ClipDrawable对应于<clip>标签,它可以根据自己当前的等级(level)来裁剪另一个Drawable。
裁剪方向可以通过android:clipOrientation和android:gravity这两个属性来共同控制。
通过ClipDrawable的setLevel()方法控制显示比例,ClipDrawable的level值范围在[0,10000],level的值越大裁剪的内容越少,当level为10000时则完全显示,而0表示完全裁剪,不可见。
12.2 ClipDrawable语法/属性
<?xml version="1.0" encoding="utf-8"?>
<clip
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
//clipOrientation表示裁剪的方向(水平和垂直两种)
android:clipOrientation=["horizontal" | "vertical"]
//gravity比较复杂必须和clipOrientation一起才能起作用,同样的我们可以通过“|”来组合使用gravity的属性值。
//top 将这个对象放在容器的顶部,不改变其大小。当 //clipOrientation 是”vertical”,裁剪从底部开始
//bottom 将这个对象放在容器的底部,不改变其大小。当clipOrientation 是 “vertical”,裁剪从顶部(top)开始
//left 将这个对象放在容器的左部,不改变其大小。当clipOrientation 是 “horizontal”,裁剪从drawable的右边(right)开始,默认值
//right 将这个对象放在容器的右部,不改变其大小。当clipOrientation 是 “horizontal”,裁剪从drawable的左边(left)开始
//center_vertical 将对象放在垂直中间,不改变其大小,如果clipOrientation 是 “vertical”,那么从上下同时开始裁剪
//fill_vertical 垂直方向上不发生裁剪。(除非drawable的level是 0,才会不可见,表示全部裁剪完)
//center_horizontal 将对象放在水平中间,不改变其大小,clipOrientation 是 “horizontal”,那么从左右两边开始裁剪
//fill_horizontal 水平方向上不发生裁剪。(除非drawable的level是 0,才会不可见,表示全部裁剪完)
//center 将这个对象放在水平垂直坐标的中间,不改变其大小。当clipOrientation 是 “horizontal”裁剪发生在左右。当clipOrientation是”vertical”,裁剪发生在上下。
//fill 填充整个容器,不会发生裁剪。(除非drawable的level是 0,才会不可见,表示全部裁剪完)。
//clip_vertical 附加选项,表示竖直方向的裁剪,很少使用
//clip_horizontal 附加选项,表示水平方向的裁剪,很少使用
android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"] />
12.3 ClipDrawable使用案例
Demo1:实现简单的剪裁效果
效果:
第一步:xml定义
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/image1"
android:clipOrientation="horizontal"
android:gravity="right"
>
</clip>
第二步:使用
如果在xml引用时设置的是背景图所以使用clipImage.getBackground(),
如果在xml引用时使用的是src,那么就使用clipImage.getDrawable()
//ClipDrawable的等级范围是[0,10000],而且level越大裁剪区域越少,当level=10000时,表示不裁剪,
//我们在这里设置了level为6000则表示裁剪40%的区域
ImageView clipImage= (ImageView) findViewById(R.id.clipImage);
ClipDrawable clip= (ClipDrawable) clipImage.getBackground();
clip.setLevel(6000);