Uso de Drawable para el desarrollo de Android

Drawable representa un contenido dibujable, que puede estar compuesto por imágenes o colores. Drawables en Android incluyen BitmapDrawable, GradientDrawable, LayerDrawable, etc.

1. Mapa de bits dibujable

Representa una imagen, podemos poner la imagen directamente en el directorio dibujable, y la imagen puede referenciarse directamente como dibujable, por supuesto, también podemos usar xml para describir una imagen.

<?xml version="1.0" encoding="utf-8"?>
<bitmap
    xmlns:android="http://schemas.android.com/apk/res/android"
    //图片的路径,必须提供,引用mipmap下的图片是没有提示的,手动补全是可以使用的,不知道为什么
    android:src="@mipmap/miku"
    //抗锯齿,使图片更平滑,开不开都没关系,说实话看不出来差别
    android:antialias="true"
    //抖动效果,在低质量的设备上提供较好的显示效果,推荐true,
    android:dither="true"
    //图片的透明度,取值0.0f~1.0f,0完全透明,1不透明
    android:alpha="1"
    //平铺模式,clamp:底部像素延伸,mirror:水平和竖直镜像平铺,repeat:水平和竖直方向平铺
    //注意:如果设置为ImageView的src属性,则不会出现这些效果,做View的背景才能看到
    android:tileMode="clamp"
    //开启过滤,当图片被拉伸或压缩的时候能保持较好的效果,推荐true
    android:filter="true"
    //对齐方式,当图片的宽高小于容器View的宽高时从哪个方向开始显示,参考TextView的文字对齐方式
    android:gravity="top"
    //色调,99.99%的情况都不需要设置,需要配合tintMode一起使用,不然设置的颜色会挡住图片
    android:tint="#39c5bb"
    //色调模式,取值:multiply、src_over、screen等等,不少取值会遮盖住图片
    android:tintMode="src_over">

</bitmap>

tileMode = "abrazadera"

TileMode = "repetir"

modo de mosaico = "espejo"

tinte = "# 39c5bb" + tintMode = "multiplicar"

2. Forma dibujable

ShapeDrawable se refiere a la etiqueta de forma en el archivo xml, y la clase correspondiente real es que GradientDrawablerepresenta un gráfico.

Las propiedades coherentes con BitmapDrawable no se describen en detalle.

<?xml version="1.0" encoding="utf-8"?>
<shape
    //图形的基本形状,默认是矩形,取值: rectangle、oval,line,ring
    android:shape="rectangle"
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    //描边,边宽度,边颜色,line和ring必须设置这个,否则无法正常显示
    //dashWidth需要配合dashGap一起使用,两个值都不为0,会显示虚线效果
    <stroke android:width="5dp" android:color="#39c5bb"/>
    //填充色,决定了形状的整体颜色
    <solid android:color="#000"/>
    //指定形状的宽高,未指定size,getIntrinsicWidth()等方法返回-1
    <size android:width="100dp" android:height="100dp"/>
    //可以实现圆角效果的半径,对于矩形,则四个角都会改变,也可以单独设置两个角的圆角效果
    //bottomLeftRadius、bottomRightRadius...
    <corners android:radius="10dp"/>
    //渐变色,该节点和solid冲突,只能有一个,具体效果见下图
    //angle:会影响渐变的方向,该值需要是45的倍数
    //centerColor:渐变的中间色
    //startColor:渐变的起始色
    //endColor:渐变的结束色
    //type:渐变的类型,取值:sweep(扫描渐变,想象一下雷达)、radial(径向渐变)、linear(线性渐变,默认)
    //gradinetRaduis:只有type = "radial"有效,渐变半径
    //useLevel:一般false,作为StateListDrawable为true
    //centerY:渐变中心点的Y坐标,会影响渐变效果
    //centerX:渐变中心点的X坐标,会影响渐变效果
    <gradient android:angle="45" android:centerColor="#f00" android:startColor="#fff" android:endColor="#000"/>

</shape>

3.LayerDrawable

Representa una colección Drawable jerárquica, y la etiqueta correspondiente es lista de capas. Puede contener múltiples Drawables, y algunos efectos superpuestos se pueden lograr a través de LayerDrawable.

Por ejemplo:

Para el efecto de la imagen de arriba, debe configurarlo en el atributo src de ImageView para ver el efecto.

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    //item 表示一个drawable对象,也可以通过android:drawable属性来引用一个现有drawable对象
    //
    <item>
        //可以设置一个drawable的旋转角度,pivotY,pivotX旋转的偏移量
        <rotate android:fromDegrees="90">
            <shape android:shape="rectangle">
                <solid android:color="#ff0000"/>
                <corners android:radius="10dp"/>
		//这里设置的width和height对于View来说是没有任何意义的,它会按照View的大小来自适应
                <size android:height="20dp" android:width="300dp"/>
            </shape>
        </rotate>
    </item>

    <item>
        <rotate android:fromDegrees="45">
            <shape android:shape="rectangle">
                <solid android:color="#00ff00"/>
                <corners android:radius="10dp"/>
                <size android:height="20dp" android:width="300dp"/>
            </shape>
        </rotate>
    </item>

    <item>
        <rotate android:fromDegrees="135">
            <shape android:shape="rectangle">
                <solid android:color="#0000ff"/>
                <corners android:radius="10dp"/>
                <size android:height="20dp" android:width="300dp"/>
            </shape>
        </rotate>
    </item>

    <item>
        <rotate android:fromDegrees="180">
            <shape android:shape="rectangle">
                <solid android:color="#39c5bb"/>
                <corners android:radius="10dp"/>
                <size android:height="20dp" android:width="300dp"/>
            </shape>
        </rotate>
    </item>
</layer-list>

Los atributos que se usan con más frecuencia son android:left, android:top, android:right, android:bottom, que representan respectivamente el desplazamiento del dibujable en relación con la vista arriba, abajo, izquierda y derecha.

por fin

Para muchos ingenieros de Android de nivel junior y medio, si quieren mejorar sus habilidades, a menudo tienen que explorar y crecer por sí mismos. El aprendizaje no estructurado es ineficiente, prolongado e inútil. Después de mucho tiempo, es normal desanimarse después de dedicar mucho tiempo y esfuerzo y no ver el efecto deseado.

Por lo tanto, debe encontrar la forma más adecuada para aprender y tener una forma de pensar, de lo contrario, no solo perderá tiempo, sino que también retrasará su desarrollo futuro.

Si está atrapado en el cuello de botella de la falta de recursos de aprendizaje, entonces puedo ayudarlo. Todas las notas de conocimiento anteriores se comparten de forma gratuita. Si desea obtener notas de conocimiento, puede hacer clic en el código QR a continuación para obtenerlas.

Supongo que te gusta

Origin blog.csdn.net/Eqiqi/article/details/129670429
Recomendado
Clasificación