当前位置:

首页 > 系统应用 > 8.1.2 Android中的13种Drawable小结 Part 2

8.1.2 Android中的13种Drawable小结 Part 2

Android Studio macOS版
Android Studio macOS版

Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

立即下载
Mac 2026-10-13
数据库 编程开发 服务器管理 集成开发环境

本节引言: 这一节接着往下看 Android 里的 Drawable 资源。上一节已经过了一遍: ColorDrawable;NinePatchDrawable; ShapeDrawable;GradientDrawable!也就是这四种 Drawable。 接下来要继续展开另外五个 Drawabl

本文目录

    本节引言:

    这一节接着往下看 Android 里的 Drawable 资源。上一节已经过了一遍:
    ColorDrawable;
    NinePatchDrawable;
    ShapeDrawable;
    GradientDrawable!
    也就是这四种 Drawable。
    接下来要继续展开另外五个 Drawable,分别是:
    BitmapDrawable;
    InsertDrawable;
    ClipDrawable;
    RotateDrawable;
    AnimationDrawable!
    老规矩,先把这 13 种 Drawable 的导图贴出来:

    好的,开始本节内容~

    1.BitmapDrawable

    对Bitmap的一种封装,可以设置它包装的bitmap在BitmapDrawable区域中的绘制方式,有: 平铺填充,拉伸填或保持图片原始大小!以<bitmap>为根节点! 可选属性如下:

    • src:图片资源~
    • antialias:是否支持抗锯齿
    • filter:是否支持位图过滤,支持的话可以是图批判显示时比较光滑
    • dither:是否对位图进行抖动处理
    • gra vity:若位图比容器小,可以设置位图在容器中的相对位置
    • tileMode:指定图片平铺填充容器的模式,设置这个的话,gra vity属性会被忽略,有以下可选值: disabled(整个图案拉伸平铺),clamp(原图大小), repeat(平铺),mirror(镜像平铺)

    对应的效果图:

    ①XML定义BitmapDrawable:

      
    

    ②实现相同效果的Ja va代码:

    BitmapDrawable bitDrawable = new BitmapDrawable(bitmap);  
    bitDrawable.setDither(true);  
    bitDrawable.setTileModeXY(TileMode.MIRROR,TileMode.MIRROR);  

    2.InsetDrawable

    表示把一个Drawable嵌入到另外一个Drawable的内部,并且在内部留一些间距, 类似与Drawable的padding属性,但padding表示的是Drawable的内容与Drawable本身的边距! 而InsetDrawable表示的是两个Drawable与容器之间的边距,当控件需要的背景比实际的边框 小的时候,比较适合使用InsetDrawable,比如使用这个可以解决我们自定义Dialog与屏幕之间 的一个间距问题,相信做过的朋友都知道,即使我们设置了layout_margin的话也是没用的,这个 时候就可以用到这个InsetDrawable了!只需为InsetDrawable设置一个insetXxx设置不同 方向的边距,然后为设置为Dialog的背景即可!

    相关属性如下:

    • 1.drawable:引用的Drawable,如果为空,必须有一个Drawable类型的子节点!
    • 2.visible:设置Drawable是否额空间
    • 3.insetLeft,insetRight,insetTop,insetBottm:设置左右上下的边距

    ①XML中使用:

      
     

    在Ja va代码中使用:

    InsetDrawable insetDrawable = new InsetDrawable(getResources()  
            .getDrawable(R.drawable.test1), 10, 10, 10, 10); 

    使用效果图:

    3.ClipDrawable

    Clip可以译为剪的意思,我们可以把ClipDrawable理解为从位图上剪下一个部分; Android中的进度条就是使用ClipDrawable来实现的,他根据设置level的值来决定剪切 区域的大小,根节点是<clip>

    相关属性如下:

    • clipOrietntion:设置剪切的方向,可以设置水平和竖直2个方向
    • gra vity:从那个位置开始裁剪
    • drawable:引用的drawable资源,为空的话需要有一个Drawable类型的子节点 ps:这个Drawable类型的子节点:就是在加上这样的语句: 这样...

    使用示例:

    核心:通过代码修改ClipDrawable的level的值!Level的值是0~10000!

    运行效果图:

    代码实现:

    ①定义一个ClipDrawable的资源xml:

    
     

    ②在activity_main主布局文件中设置一个ImageView,将src设置为clipDrawable! 记住是src哦,如果你写成了blackground的话可是会报空指针的哦!!!!

    
    
      

    ③MainActivity.ja va通过setLevel设置截取区域大小:

    public class MainActivity extends AppCompatActivity {
    private ImageView img_show;
        private ClipDrawable cd;
        private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 0x123) {
                    cd.setLevel(cd.getLevel() + 500);
                }
            }
        };
    @Override
        protected void onCreate(Bundle sa vedInstanceState) {
            super.onCreate(sa vedInstanceState);
            setContentView(R.layout.activity_main);
            img_show = (ImageView) findViewById(R.id.img_show);
            // 核心实现代码
            cd = (ClipDrawable) img_show.getDrawable();
            final Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    handler.sendEmptyMessage(0x123);
                    if (cd.getLevel() >= 10000) {
                        timer.cancel();
                    }
                }
            }, 0, 300);
        }
    }

    好的,有点意思,妹子图别问我拿,百度上一堆哈~

    4.RotateDrawable

    用来对Drawable进行旋转,也是通过setLevel来控制旋转的,最大值也是:10000

    相关属性如下:

    • fromDegrees:起始的角度,,对应最低的level值,默认为0
    • toDegrees:结束角度,对应最高的level值,默认360
    • pivotX:设置参照点的x坐标,取值为0~1,默认是50%,即0.5
    • pivotY:设置参照点的Y坐标,取值为0~1,默认是50%,即0.5 ps:如果出现旋转图片显示不完全的话可以修改上述两个值解决!
    • drawable:设置位图资源
    • visible:设置drawable是否可见!

    角度图如下:

    使用示例:

    运行效果图:

    代码实现:

    在第三点的clipDrawable上做一点点修改即可!

    ①定义一个rotateDrawable资源文件:

    
      

    ②activity_main.xml中修改下src指向上述drawable即可,MainActivity只需要把ClipDrawable 改成rotateDrawable即可!

    public class MainActivity extends AppCompatActivity {
    private ImageView img_show;
        private RotateDrawable cd;
        private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == 0x123) {
                    if (cd.getLevel() >= 10000)
                        Toast.makeText(MainActivity.this, "转完了~",
                                Toast.LENGTH_LONG).show();
                    cd.setLevel(cd.getLevel() + 400);
                }
            }
        };
    @Override
        protected void onCreate(Bundle sa vedInstanceState) {
            super.onCreate(sa vedInstanceState);
            setContentView(R.layout.activity_main);
            img_show = (ImageView) findViewById(R.id.img_show);
            // 核心实现代码
            cd = (RotateDrawable) img_show.getDrawable();
            final Timer timer = new Timer();
            timer.schedule(new TimerTask() {
                @Override
                public void run() {
                    handler.sendEmptyMessage(0x123);
                    if (cd.getLevel() >= 10000) {
                        timer.cancel();
                    }
                }
            }, 0, 100);
        }
    }

    5.AnimationDrawable

    这一节要说的最后一个 Drawable,是 AnimationDrawable。它的作用很直接,就是在 Android 里做帧动画:把一组 Drawable 按照既定顺序一帧一帧播放出来。Android 的动画体系其实相当丰富,传统补间动画也包括平移、缩放等各种效果,不过这里先只聚焦 AnimationDrawable 这种帧动画实现方式。至于 alpha、scale、translate、rotate 这些内容,后面放到动画章节里再展开细讲。

    我们这里使用<animation-list>作为根节点

    相关属性方法:

    oneshot:设置是否循环播放,false为循环播放!!! duration:帧间隔时间,通常我们会设置为300毫秒 我们获得AniamtionDrawable实例后,需要调用它的start()方法播放动画,另外要注意 在OnCreate()方法中调用的话,是没有任何效果的,因为View还没完成初始化,我们可以 用简单的handler来延迟播放动画!当然还有其他的方法,可见下述链接: Android AnimationDrawable运行的几种方式 使用AnimationDrawable来实现帧动画真的是非常方便的~

    使用示例:

    运行效果图:

    代码实现:

    ①先定义一个AnimationDrawable的xml资源文件:

    
    
    
    
        
        
        
        
     

    ②activity_main.xml设置下src,然后MainActivity中:

    public class MainActivity extends AppCompatActivity {
    private ImageView img_show;
        private AnimationDrawable ad;
    @Override
        protected void onCreate(Bundle sa vedInstanceState) {
            super.onCreate(sa vedInstanceState);
            setContentView(R.layout.activity_main);
            img_show = (ImageView) findViewById(R.id.img_show);
            // 核心实现代码
            ad = (AnimationDrawable) img_show.getDrawable();
            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    ad.start();
                }
            }, 300);
        }
    }

    嘿嘿,超简单有木有,以后在一些需要用到帧动画的地方,直接上AnimationDrawable, 当然,只适合于不需要进行控制的帧动画,比如上面这个就是超表下拉刷新时候的进度条素材 做成的一个简单帧动画!根据自己的需求自行拓展~

    本节小结:

    本节又介绍了另外的五个Drawable,很有趣是吧,还不快快将他们应用到你的实际开发当中~ 嘻嘻,就说这么多,谢谢!另外刚刚有读者私信我说以前的文章别删行不行,嗯,这里说下 只删除一些重复的,比如和这个雷同的那几节~当然我也会备份!删除的文章都会备份的~ 所以放心!

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    系统应用 Android
    相关文章 更多
    Ducter 0.0.44:Android新增“用这台手机”,敏感动作逐次确认
    Ducter 0.0.44:Android新增“用这台手机”,敏感动作逐次确认

    Ducter 0.0.44在Android设备卡加入“用这台手机”,提供设置引导和占用提示。每次借用手机均需确认,发送、付款与删除等待用户Go;官方说明银行、钱包、密码和身份验证器应用不在可操作范围,iPhone不支持此路径。

    作业帮APP下载_安卓苹果官方正版链接
    作业帮APP下载_安卓苹果官方正版链接

    作业帮安卓下载可从https://oia.zybang.com/download/进入,苹果官方应用ID为803781859。先核对系统,再检查主APP名称及广州极目未来文化科技有限公司,并查看设备兼容性;家长版、口算和直播课应使用各自安装渠道。

    WPS移动版表格文字怎么自动换行并对齐
    WPS移动版表格文字怎么自动换行并对齐

    WPS移动版表格可从单元格格式进入对齐页,开启自动换行并设置水平、垂直对齐。本文说明选区、行高、列宽和合并单元格的影响,以及保存后如何检查长文字是否完整显示。

    手机WPS怎么把多张图片合并成一个PDF文档
    手机WPS怎么把多张图片合并成一个PDF文档

    手机WPS可通过“图片转PDF”一次选择多张照片,检查页序、方向和版式后,选择保存位置并输出为一个多页PDF。服务页搜索和旧版应用页入口不同,保存前应核对合并方式及当前账号权益,生成后重新打开确认页数和内容完整。

    一文看懂灵活计算器手机端和电脑端的使用区别
    一文看懂灵活计算器手机端和电脑端的使用区别

    想知道灵活计算器在手机和电脑上怎么用最高效?本文详解两端在输入节奏、布局整理及账号同步上的核心区别,助你避免数据丢失,建立顺畅的跨设备记账习惯。

    Android安装包无法打开?灵活计算器APK安装排查指南
    Android安装包无法打开?灵活计算器APK安装排查指南

    遇到灵活计算器APK无法打开或解析错误?本文详解Android侧载安装的排查逻辑,涵盖来源验证、权限配置、空间清理及旧版本冲突处理,帮助用户安全解决安装问题并正确恢复会员权益。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?