当前位置: 首页 > 后端技术 > Java

DrawableinAndroid(一)

时间:2023-04-01 22:55:49 Java

PS:本文为转载文章,原文可读性会更好。文末有原文目录1,Drawable的分类2,BitmapDrawable3,ShapeDrawable1,Drawable的分类代表一个图像概念,但不都是图片,也可以用来通过色彩构建多种图像效果;我们用的最多的就是Drawable作为View的背景,Drawable作为View的背景。有2种方式,一种是通过XML布局文件设置,另一种是使用逻辑代码(Java语言、kotlin语言)为View设置Drawable;Drawable是一个抽象类,它是所有Drawable子类的基类,如BitmapDrawable、ShapeDrawable、LayerDrawable和StateListDrawable等;好吧,让我们看看BitmapDrawable、ShapeDrawable、LayerDrawable和StateListDrawable这几个类的声明;StateListDrawable继承的DrawableContainer最终继承了Drawable。2、在说BitmapDrawable的属性之前,我们先写一个BitmapDrawable的demo;(1)在drawable文件夹下新建bitmap.xml;(2)Activity布局文件activity_main.xml;程序运行结果如下;我们上面写的demo是通过bitmap.xml文件来描述BitmapDrawable的。下面我们列出用于描述BitmapDrawable的属性android:src:表示图片的资源id;android:antialias:表示是否开启抗锯齿功能,true表示开启,如果开启抗锯齿,画面会变得更平滑,什么意思?例如,图片的侧面是波浪形的。如果开启抗锯齿功能,图片的边会趋于平直。android:dither:是否开启抖动效果。当图片的像素配置与手机屏幕的像素配置不一致时,开启该选项可以让高质量的图片在低质量的屏幕上保持较好的显示效果。android:filter:是否开启过滤效果;当图像尺寸被拉伸或压缩时,启用过滤效果可以保持更好的显示效果。android:gravity:当图片小于容器大小时,设置该选项可以定位图片。android:minMap:这是一个图像相关的处理技术,也叫纹理映射,默认值为false。android:tileMode:Tile模式,该属性有以下值:disabled、clamp、repeat和mirror,disable表示关闭tile模式,为默认值;repeat表示简单的水平和垂直方向的平铺效果,mirror表示水平和垂直方向的镜像投影效果,clamp表示图像周围的像素点会向四周扩展。3、ShapeDrawable可以理解为由颜色构造的图形,可以是纯色图形,也可以是带有渐变效果的图形;我们先写一个demo,然后一一解释它的属性;(1)在drawable目录下新建shape_drawable.xml文件;(2)Activity布局文件activity_main.xml;<按钮android:layout_width="match_parent"android:text="happy"android:textSize="30px"android:textColor="#FF0000"android:background="@drawable/shape_drawable"android:layout_height="wrap_content"/>程序运行结果如下;我们这里写的ShapeDrawable的效果是通过shape_drawable.xml文件的shape标签来呈现的;好吧,我们来解释一下shape标签的属性和shape子标签的其他属性;1)shape标签的属性android:shape:表示图形的形状,有四个值:矩形、椭圆、直线和环形。rectangle是长方形,oval是圆,还有线是水平线,ring是圆环,默认值是矩形。另外,必须通过shape子标签的stroke标签来指定line和ring这两个值来指定线条的宽度和颜色,才能达到预期的显示效果2)shape标签的子标签属性2、1)corners标签android:radius:适用于shape标签的android:shape属性值矩形,表示4个角的圆角角度,比android:topLeftRadius,android:bottomLeftRadius,android:属性bottomRightRadius和android:topRightRadius的优先级较低。android:topLeftRadius:左上角的角度。android:bottomLeftRadius:左下角的角度。android:bottomRightRadius:右下角的角度。android:topRightRadius:右上角的角度。2.2)gradient标签与solid标签互斥,solid表示纯色填充,gradient表示渐变效果。android:angle:表示渐变的角度,默认为0,其值必须是45的倍数,0表示从左到右,90表示从下到上。android:centerX:渐变中心点的横坐标。android:centerY:渐变中心点的垂直坐标。android:startColor:渐变的起始颜色。android:centerColor:渐变的中间色。android:endColor:渐变的结束颜色。android:gradientRadius:渐变的半径。android:type:渐变类别,其值有linear、radial和sweep三种类型,linear为线性渐变,radial为径向渐变,sweep为扫掠渐变,默认值为线性渐变。2,3)solidtagandroid:color:用颜色填充整个形状标签。2,4)stroke标签android:width:笔画的宽度。android:color:描边的颜色。android:dashWidth:虚线段的宽度。android:dashGap:构成虚线段的区间。注意:如果android:dashWidth和android:dashGap中有一个为0,则不会有虚线效果。2,5)paddingtagandroid:left:这不是表示形状区域的空白,而是包含形状的视图的左内边距。android:right:这不是表示形状区域的空白,而是包含形状的视图的右内边距的空白。android:top:这里不代表形状区域的空白,而是包含形状的视图的顶部填充空白。android:buttom:这不是表示形状区域的空白,而是包含形状的视图的底部填充空白。2、6)shape标签的size有两个android:width和android:height属性,分别代表shape的宽和高;this代表shape固有的尺寸,但一般来说并不是shape最终显示的尺寸,对于shape来说,它没有宽高的概念,作为View的背景,它会自适应宽高视图高度;Drawable的getIntrinsicWidth和getIntrinsicHeight这两个方法代表了Drawable的固有宽高,对于一些Drawable来说,比如一张图片,它的固有宽高就是图片的尺寸;对于形状来说,一般来说,它没有固有的宽度和高度的概念。size标签设置的宽高是ShapeDrawable固有的宽高,当设置View的背景时,shape会自适应View的大小。