【Android Drawable系列】- Other单个Drawable

【Android Drawable系列】- Other单个Drawable_第1张图片
Android Drawable系列

单个Drawable的使用,与shape的使用率相比其他的资源文件使用频率不太高,所以就合并到一块了。其中包括:BitmapInset DrawableClip DrawableScale Drawable

Bitmap

Bitmap也就是位图,如果要讲这个,我一定是说不清楚的。这里要讲的是资源文件中的Bitmap文件,例如:.png.jpg或者.gif图都属于Bitmap文件。图片文件不多了,用法都很熟悉,要讲的是xml中的bitmap标签。

【Android Drawable系列】- Other单个Drawable_第2张图片

这是API 28能联想出来的所有属性,其中tileModeXtileModeY需要drawable-v21目录中使用,autoMirroreddrawable-v19mipMapdrawable-v18

概览



android:src为必须属性

android:gravity

定义位图的重力。重力指示当位图小于容器时,可绘制对象在其容器中放置的位置。可以使用以下一个或多个常量值((多个用|分隔)。下面是具体说明:

说明
top 将对象放在其容器顶部,不改变其大小。
bottom 将对象放在其容器底部,不改变其大小。
left 将对象放在其容器左边缘,不改变其大小。
right 将对象放在其容器右边缘,不改变其大小。
center_vertical 将对象放在其容器的垂直中心,不改变其大小。
fill_vertical 按需要扩展对象的垂直大小,使其完全适应其容器。
center_horizontal 将对象放在其容器的水平中心,不改变其大小。
fill_horizontal 按需要扩展对象的水平大小,使其完全适应其容器。
center 将对象放在其容器的水平和垂直轴中心,不改变其大小。
fill 按需要扩展对象的垂直大小,使其完全适应其容器。这是默认值。
clip_vertical 可设置为让子元素的上边缘和/或下边缘裁剪至其容器边界的附加选项。裁剪基于垂直重力:顶部重力裁剪上边缘,底部重力裁剪下边缘,任一重力不会同时裁剪两边。
clip_horizontal 可设置为让子元素的左边和/或右边裁剪至其容器边界的附加选项。裁剪基于水平重力:左边重力裁剪右边缘,右边重力裁剪左边缘,任一重力不会同时裁剪两边。

android:tileMode

定义平铺模式。当平铺模式启用时,位图会重复。重力在平铺模式启用时将被忽略。下面是具体说明:

说明
disabled 不平铺位图。这是默认值。
clamp 当着色器绘制范围超出其原边界时复制边缘颜色
repeat 水平和垂直重复着色器的图像。
mirror 水平和垂直重复着色器的图像,交替镜像图像以使相邻图像始终相接。

示例代码:



这是mirror属性的效果

【Android Drawable系列】- Other单个Drawable_第3张图片

这是repeat属性的效果

【Android Drawable系列】- Other单个Drawable_第4张图片

这是clamp属性的效果,像是把边缘的颜色拉伸的感觉

【Android Drawable系列】- Other单个Drawable_第5张图片

Nine-Patch

Nine-Patch也就是俗称的.9图,.9图是可以拉伸区域的.9.png文件,允许根据内容调整图像大小。通常使用.9图的View会将宽高属性设置为warp_content,以便VIew适应内容扩展大小。

与Bitmap使用方式一样,可以直接使用也可以在xml定义资源引用。直接看看使用



与bitmap相同android:src为必须属性。

Inset Drawable

直译的意思就是插入Drawable,可以在其他指定的Drawable周围插入距离的一种Drawable。这么说可能不太好理解,看图

【Android Drawable系列】- Other单个Drawable_第6张图片

图中的两个方形这是的都是TextView的背景,但是第一个方形的左边和上边还留有空白,这就是使用inset标签做到的,可以在背景上增加边距,xml代码如下:





inset所支持的属性如下:

  • android:insetLeft="integer",左边插入边距
  • android:insetTop="integer",上边插入边距
  • android:insetRight="integer",右边插入边距
  • android:insetBottom="integer",底边插入边距
  • android:inset="integer",插入边距,同时作用于以上四边,会被上面的属性覆盖,在drawable-v21中使用

其实inset标签还支持其他的Drawable资源使用,可以直接在之间通过创建所支持的标签的方式使用Drawable资源。

Clip drawable

在xml文件中定义一个可以对其他drawable对象进行裁剪的drawable对象。直接看xml属性:



android:clipOrientation

控制裁剪的方向

说明
horizontal 水平裁剪可绘制对象。
vertical 垂直裁剪可绘制对象。

android:gravity的属性值太多了,并没有逐个尝试。下面是尝试写的一个例子:



可以实际并没有任何效果,还需要在代码中使用ClipDrawablesetLevel方法做相应处理

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

ImageView imageView = findViewById(R.id.inset);
ClipDrawable clipDrawable = (ClipDrawable) imageView.getDrawable();
clipDrawable.setLevel(1000);

具体效果过如下:

【Android Drawable系列】- Other单个Drawable_第7张图片

Scale drawable

可以改变其他Drawable对象尺寸的一种Drawable对象。xml属性:



这标签,差点没弄出来,用法和Clip drawable有点类似,先使用xml在通过对应的ScaleDrawablesetLevel方法来控制显示。xml代码如下:



java代码

ImageView imageView = findViewById(R.id.inset);
ScaleDrawable drawable = (ScaleDrawable) imageView.getDrawable();
drawable.setLevel(1);

具体效果过如下:

【Android Drawable系列】- Other单个Drawable_第8张图片

总结

到此,单个的Drawable资源标签就这些了。经常使用的标签会比较详细的尝试和记录,不常用的标签很多属性的细节没有一个一个去试想过了,以后有用到的的时候在进行研究。下篇文章就开始多个Drawable的标签用法了(要死的赶脚T_T!)。

你可能感兴趣的:(【Android Drawable系列】- Other单个Drawable)