Android中的Drawable(一)

这篇具有很好参考价值的文章主要介绍了Android中的Drawable(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章收藏的好句子:接受生活中的事与愿违,当你有这种坦然,你会看得更深,你会走得更远。

目录

1、Drawable 的分类

2、BitmapDrawable

3、ShapeDrawable

1、Drawable 的分类

表示一种图像的概念,但是它们又不全是图片,也是可以通过颜色来构造出各式各样的图像的效果;我们使用最多的是 Drawable 被用来作为 View 的背景使用,Drawable 作为 View 的背景使用就有2种方式了,一种是通过 XML 布局文件来设置,一种是使用逻辑代码(Java语言、kotlin语言)给 View 设置 Drawable;Drawable 是一个抽象类,它是所有 Drawable 子类的基类,比如 BitmapDrawable、ShapeDrawable、LayerDrawable 和 StateListDrawable 等;好,我们看看这 BitmapDrawable、ShapeDrawable、LayerDrawable 和 StateListDrawable  这几个类的声明;

Android中的Drawable(一)

Android中的Drawable(一)

Android中的Drawable(一)

Android中的Drawable(一)

StateListDrawable 继承的 DrawableContainer 最终是继承 Drawable。

2、BitmapDrawable

讲 BitmapDrawable 的属性之前,我们先写一个 BitmapDrawable 的 demo;

(1)在 drawable 文件夹下新建一个 bitmap.xml ;

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/img_back"
    android:dither="true"
    >
</bitmap>

(2)Activity 的布局文件 activity_main.xml ;

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/bitmap"/>
</RelativeLayout>

程序运行结果如下所示;

Android中的Drawable(一)

我们上面写的 demo 是通过 bitmap.xml 文件来描述 BitmapDrawable 的,下面我们一一列举描述 BitmapDrawable 的所用属性。

android:src  :表示图片的资源 id;

android:antialias  : 表示是否开启抗锯齿功能,true 表示已经开启,如果开启了抗锯齿,那么图片就会变得平顺起来,什么意思呢?就比如说,一张图片的边是呈波浪线的,如果开启了抗锯齿功能,那么图片的边就趋向于直线的。

android:dither  : 是否开启抖动效果,当图片的像素配置和手机屏幕的像素配置不一致时,开启这个选项可以让高质量的图片在低质量的屏幕上还能保持较好的显示效果。

android:filter  : 是否开启过滤效果;当图片尺寸被拉伸或者压缩时,开启过滤效果可以保持较好的显示效果。

android:gravity  : 当图片小于容器的尺寸时,设置此选项可以对图片进行定位。

android:minMap  : 这是一种图像相关的处理技术,也叫纹理映射,默认值为 false。

android:tileMode  : 平铺模式,这个属性有如下几个值:disabled、clamp、repeat 和 mirror,disable 它是表示关闭平铺模式,这是默认值;repeat 表示的是简单的水平和竖直方向上的平铺效果, mirror 表示一种在水平和竖直方向上的镜面投影效果,clamp 表示的效果就是图片四周的像素会扩展到周围区域。

3、ShapeDrawable

它可理解为通过颜色来构造的图形,可以是纯色的图形,也可以是具有渐变效果的图形;我们先写一个 demo,然后再对它的属性一一说明;

(1)在 drawable 目录下新建一个 shape_drawable.xml 文件;

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="38px"/>
    <solid android:color="#1756F1" />
    <!--<gradient android:centerColor="#00FF00"/>-->
    <padding android:bottom="10px"
        android:top="10px"
        android:left="10px"
        android:right="10px"/>
    <size android:width="100px"
        android:height="100px"/>
    <!--<stroke android:width="10px"-->
        <!--android:dashGap="3px"-->
        <!--android:dashWidth="3px"-->
        <!--android:color="#FF0000"/>-->
</shape>

(2)Activity 的布局文件 activity_main.xml ;

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <Button
        android:layout_width="match_parent"
        android:text="开心"
        android:textSize="30px"
        android:textColor="#FF0000"
        android:background="@drawable/shape_drawable"
        android:layout_height="wrap_content" />
</RelativeLayout>

程序运行的结果如下所示;

Android中的Drawable(一)

我们这里写的 ShapeDrawable 的效果是通过 shape_drawable.xml 文件的 shape 标签呈现出来的;好,我们现在讲解一下 shape 标签的属性以及 shape 的子标签的其他属性;

1) shape 标签的属性

android:shape  : 表示图形的形状,有 rectangle、oval、line 和 ring 这4个值,rectangle 是矩形,oval 是圆形,line 是横线,ring 是圆环,它的默认值是矩形,另外 line 和 ring 这两个值必须要通过 shape 的子标签 stroke 标签来指定线的宽度和颜色等信息,才达到预期的显示效果。

2)shape 标签的子标签属性

2、1)corners 标签

android:radius  : 适用于 shape 标签的 android:shape 属性值 rectangle,表示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 这3种,linear 是线性渐变,radial 是径向渐变,sweep 是扫描性渐变,默认值是线性渐变。

2、3)solid 标签

android:color  : 将整个 shape 标签给填充颜色。

2、4)stroke 标签

android:width  : 描边的宽度。

android:color  :  描边的颜色。

android:dashWidth  :  组成虚线线段的宽度。

android:dashGap  :  组成虚线线段的间隔。

 注意:如果 android:dashWidth 和 android:dashGap 有任意一个为0,那么就没有虚线的效果。

2、5)padding 标签

android:left  :这个不是表示 shape 区域 的空白,而是表示包含 shape  的 view 的左边内边距空白。

android:right :  这个不是表示 shape区域的空白,而是表示包含 shape 的view的右边内边距空白。

android:top : 这个不是表示 shape 区域的空白,而是表示包含 shape 的 view 的顶部内边距空白。

android:buttom : 这个不是表示 shape 区域的空白,而是表示包含 shape 的 view 的底部内边距空白。

2、6) size 标签

shape 的大小,有两个 android:width 和 android:height 属性,分别表示 shape 的宽和高;这个表示的是 shape 的固有大小,但是一般来说它并不是 shape 最终显示的大小,对于 shape 来说它并没有宽和高的概念,作为 View 的背景它会自适应 View 的宽和高;Drawable 的两个方法 getIntrinsicWidth 和 getIntrinsicHeight 表示的是 Drawable的固有宽和高,对于有些 Drawable 比如图片来说,它的固有宽和高就是图片的尺寸;而对于 shape 一般来说,它是没有固有宽和高这个概念的,size 标签设置的宽和高就是 ShapeDrawable 的固有宽和高,作为 View 的背景时,shape 会适配为 View 的大小。文章来源地址https://www.toymoban.com/news/detail-425089.html

到了这里,关于Android中的Drawable(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android实现保存res下(drawable/mipmap)的图片到手机相册

    项目小需求需要保存二维码名片到手机相册的需求,该图片在res/mipmap或者res/drawable文件夹下,实现方法如下。 代码如下(示例): 代码如下(示例): 以上就是今天要讲的内容,本文仅仅简单介绍了在res/mipmap或者res/drawable文件夹下图片保存到手机相册的方法。

    2024年02月12日
    浏览(56)
  • 句子中的最多单词数

    🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。 一个 句子 由一些 单词 以及它们之间的单个空格组成,句子的开头和结尾不会有多余空格。 给你一个字符串数组 sentences ,其中 sentences[i] 表示

    2024年01月17日
    浏览(33)
  • 一篇文章搞定《实战中的设计模式之Android版》

    其实大多数可能和我一样,在开发项目的累积经验下,和对设计模式隐约的记忆下。 在开发项目的过程中其实已经使用到了设计模式,但是不能自知。 比如:之前开发的基于AI的一个对话IM,里面涉及到了很多的设计模式。但是都是下意识的去使用,甚至连他是那种设计模式

    2024年02月10日
    浏览(48)
  • leetcode 2114. 句子中的最多单词数

    题目: 一个 句子 由一些 单词 以及它们之间的单个空格组成,句子的开头和结尾不会有多余空格。 给你一个字符串数组 sentences ,其中 sentences[i] 表示单个 句子 。 请你返回单个句子里 单词的最多数目 。 解题方法: 1.遍历列表,获取每个值,将值(字符串)用split转换成列

    2024年02月02日
    浏览(40)
  • Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理(包括词的属性处理)的简单整理 Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理(包括词的属性处理)的简单整理

    目录 Android Studio 之 Android 中使用 HanLP 进行句子段落的分词处理(包括词的属性处理)的简单整理 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、实现步骤 六、关键代码 附录:在 HanLP 中,Term 对象的 nature 字段表示词性 Android 开发中的一些基础操作,使用整理

    2024年02月12日
    浏览(34)
  • 全网最全2W字-基于Java+SpringBoot+Vue+Element实现小区生活保障系统(建议收藏)

    博主介绍 : ✌ 全网粉丝30W+,CSDN特邀作者、博客专家、新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌  🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到哟  java项目精

    2024年02月07日
    浏览(39)
  • 【NanoHTTPD】Android,使用NanoHTTPD搭建服务器,接受Http请求,最佳实践

    安卓app,作为服务器,接受Http,get post 请求推送数据,NanoHTTPD是一个免费、轻量级的(只有一个Java文件) HTTP服务器,可以很好地嵌入到Java程序中。支持 GET, POST, PUT, HEAD 和 DELETE 请求,支持文件上传,占用内存很小。 开源地址:GitHub - NanoHttpd/nanohttpd: Tiny, easily embeddable HTTP serv

    2024年02月10日
    浏览(44)
  • CSDN文章点赞、收藏、评论后到底发生了什么?简要分析HTTP交互机制

    作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他拥有的,而不是他会的。所以可以不学无数,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络攻防。我的专栏文章知识点全面细致,逻辑清晰、结合实战,让

    2024年02月21日
    浏览(55)
  • jQuery、vue、小程序、uni-app中的本地存储数据和接受数据

    jQuery: 存储数据: 获取数据: Vue.js: 存储数据: 获取数据: 小程序(微信小程序、支付宝小程序、百度小程序等): 存储数据: 获取数据: uni-app: 存储数据: 获取数据: 以上是四种常用的前端框架/技术中使用本地存储数据和接收数据的方法。具体使用哪一种取决于你正在

    2024年02月03日
    浏览(40)
  • jQuery、vue、小程序、uni-app中的本地存储数据和接受数据是什么?

    在这四个工具/框架中,Uni-app和微信小程序比较类似,因为它们都是为了实现跨平台开发而设计的。 jQuery  是一个快速、小巧且特性丰富的 JavaScript 库。它提供了各种操作和处理 HTML DOM、事件、动画,以及提供各种工具函数的功能。然而,关于本地存储数据,jQuery 本身并没有

    2024年02月21日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包