Android中批处理drawable-xxx目录中图片资源的那些事儿

2023-05-16

          看到这个题目的时候,我想多少有人会觉得诧异。是的,当我在编程中需要通过代码的方式控制27张图片像幻灯片一样按固定时间顺序播放的时候,我想把自己是如何做的记录下来和大家一起分享,同时也是为了对抗自己的遗忘曲线吧。当我为这片文章起名的时候突然想到了之前看过的《明朝那些事儿》《互联网的那点事》。想了想这些名字其实就是想告诉人们一些事,很有分享精神。索性起名《Android中批处理drawable-xxx目录中图片资源的那些事儿》,代表自己的一种分享态度。

         在Android平台的技术学习或开发项目中,有时我们会遇到对图片的批量处理,比如依次播放图片,依次上传图片等。我先简单介绍一下图片拷贝到drawable-xxx目录后发生了些什么事?当我们把图片拷贝到drawable-xxx目录后,会在项目文件gen/项目包名/R.java中生成一个内部类  public static final class drawable,这个类中封装了drawable-xxx目录下所有图片的索引。命名方式如: public static final int i1=0x7f020000; 这个索引一唯一的。Android之所以提供这样的索引目的当然是为了使用资源的方便,Android中还有其他类型资源,比如颜色资源尺寸资源样式资源字符串资源id资源,他们都会在定义之后自动在R.java文件中产生对应的内部类封装资源索引,本次我们只谈图片资源。如下图:

   图片资源目录:

      

       R.java文件中的图片资源索引内部类:

        


        由上图不难发现一些规律,那就是图片在drawable-xxx目录中的排序并不是按先拷贝就排在前面,后拷贝的就排在后面,

而是以字母或数字的自然顺序进行的(自然顺序是a到z,0到9)。并且生成的R.java中的索引排序和drawable-xxx目录中图片的排序是一样的。索引类型是int型,每个索引的值都是一个按16进制表示的值,相邻的索引值之间的差值为1,也就是每一个索引的下一个索引值都比当前索引的值大1。知道这些规律有什么用呢?知道这些规律我们可以将要批量处理的图片名称按这样的规律命名,将会大大提高访问图片的便捷性。就拿我遇到的那个需求为例:


图片命名方式一:(从左到右)

i1,   i10,    i11,    i12,  i13,  i14  ,  i15,   i16,  i17,  i18,  i19,

i2,   i20 ,  i21,     i22,  i23,  i24,    i25,   i26,  i27,  i28,  i29,

i3,   i30,   i31,     i32,  i33


当图片如上命名时,drawable-xxx中的图片就会从i1到i33依次排序,R.java中drawable索引也会从i1到i33依次排序。


在代码中,定义一个长度为27的Drawable图片类型的数组:


Drawable [] pics = new Drawable[27]; 


循环通过图片索引会的图片资源对象,然后存入pics数组中:

for(int i=0;i<27;i++){

   //红字体部分充分利用上述图片命名规律,才使得循环获取Drawable方便起来

   pics[i]  = getResource().getDrawable(R.drawable.i1+i);

}



图片命名方式二:(从左到右)

     i1,       i2,      i3,       i4,       i5,      i6 ,      i7,      i8,     i9,    i10,  

     i11,    i12,    i13 ,    i14,     i15,    i16,    i17,    i18,   i19,  i20,  

     

     i21,    i22,    i23,     i24,     i25,    i26,    i27


        我们希望可以从i1到i27这样的顺序批处理图片,但是当我们把这些图片拷贝到drawable-xxx目录中,

图片依然会按字母和数字的自然顺序排序,R.java中的drawable索引自然与drawable-xxx中图片的排序是一致的,

我们可以用如下方式处理:



在代码中,定义一个长度为27的Drawable图片类型的数组:


Drawable [] pics = new Drawable[27]; 



循环通过图片索引会的图片资源对象,然后存入pics数组中:

for(int i=0;i<27;i++){

   //红字体部分充分利用上述图片命名规律,才使得循环获取Drawable方便起来

   int id = getResources().getIdentifier("i" + (i + 1), "drawable","com.kedi.r_demo");
   pics[i] = getResources().getDrawable(id);

}

       最后要说的是,我们已经把所有的要批量处理的图片对象存放到名为pics的数值中了,至于要将这些图片用来做什么,就看大家自己的需求了,大家可以看我的博文《Android游戏特效》篇来实践一下今天分享的内容。





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android中批处理drawable-xxx目录中图片资源的那些事儿 的相关文章

随机推荐

  • Android Camera 摄像头 预览时 水平镜像

    一 效果图 废话不多说 xff0c 直接看效果 二 关键代码 span class token class name Matrix span matrix span class token operator 61 span surfaceV
  • NSIS ERROR解决方法

    可能有病毒 如果没病毒可用 NCRC命令跳过检测 xff1a 开始菜单 运行 输入cmd xff0c 点确定 xff0c 会出现黑色类似DOS的窗口在此窗口中输入 xff1a start 空格 安装文件目录例如F 新建文件夹 steup e
  • 百度网盘限速下载,PanDownload简直逆天

    目前来说PanDownload依然是突破限速的首选软件 xff0c 虽然有时候也会出现波动 xff0c 但至少比管家要强太多太多 pandownload官网 PanDownload是一款免费软件 xff0c 请至官网下载 http pand
  • win10+TeamVIew+花生壳 0元实现 远程开机教程附带截图超详细 已实践成功

    win10 43 TeamVIew 43 花生壳 实现远程开机 最近dnf出了累计在线时长送装备的活动 xff0c 公司电脑挂游戏又不太好 xff0c 云主机的实现成本太高 xff0c 于是有了远程自己家里的电脑挂游戏的想法 xff0c 但
  • 我安装archlinux的过程总结

    根据网上的文章 Archlinux 2015 07 01 和 Windows7 双系统 安装教程 改编 2017 11 18 Archlinux 2015 07 01 和 Windows7 双系统 安装教程 提前在windows7下给Arc
  • 使用Gradle发布Android开源项目到JCenter

    这里介绍一下 xff0c 如何使用Gradle发布到jcenter 注册 先到https bintray com注册一个账号 配置账号 我们需要配置一下BINTRAY USER及BINTRAY KEY两个属性 BINTRAY USER即你注
  • android中activity和fragment之间的跳转问题

    一 描述 xff1a 现MainActivity中有Fragment1 Fragemnt2 Fragment3 Fragment4 xff0c 还有一个Activity2和一个按钮 二 需求 xff1a 1 从Fragment2跳转至Act
  • 苹果新发布的Apple M1 SoC处理器,对比25年前第一代ARM1,性能强了多少?

    来源 xff1a Andrei xff0c 整理 xff1a 晓宇 微信公众号 xff1a 芯片之家 xff08 ID xff1a chiphome dy xff09 2020年11月10日 xff0c 苹果发布了他们全新的MacBook系
  • 在Windows平台使用python3调用dronekit并仿真

    实验平台 Windows 10Python3 7dronekit python 2 9 2 本文使用上述环境进行实验 dronekit python官方文档1的Introduction Release Notes部分更新到dronekit
  • 计算机概论复习:知识大全

    为期末考试复习的笔记 xff0c 参考了各种资料 1 计算机的定义 1 1计算机系统的组成 1 由硬件和软件组成 xff1b 2 软件 xff1a 应用软件 办公自动化软件 财务管理软件 xff08 记法 xff1a 有专门应用语境的软件
  • SpringMVC常用注解解释

    SpringMVC常用注解详解 1 ResquestParam 作用 xff1a 把请求中指定名称的参数给控制器中的形参赋值 属性 xff1a value xff1a 请求参数中的名称 required xff1a 请求参数中是否必须提供此
  • 约瑟夫环(链表法,公式法)

    约瑟夫环作为一个数学问题 xff0c 它的代码实现方式有很多 xff0c 比如循环链表 xff0c 公式解决或者动态规划 xff0c 之前参考资料也有用递归解决的 Anyway xff0c 这些都是解决约瑟夫环问题很有效的方法 这里总结两种
  • C/C++对Unicode编码的处理

    http blog chinaunix net uid 23414687 id 2425175 html MultiByteToWideChar CP ACP 0 p 1 tUni 1 调用windows的API函数将中文内码转换成 UNI
  • Android8.0 user版本adb 的log输出到串口中

    我们在调试adb时不能使用logcat xff0c 这个时候我们需要把adb的log输出到串口 xff0c init就能实现 xff0c 我们仿造init的代码 xff0c 在adbd的main函数中调用了如下函数InitKernelLog
  • 爬虫——动作链、xpath、打码平台使用

    系列文章目录 第一章 爬虫 爬虫初识 requests模块 第二章 代理搭建 爬取视频网站 爬取新闻 BeautifulSoup4介绍 bs4 遍历文档树 bs4搜索文档树 bs4使用选择器 第三章 selenium基本使用 无界面浏览器
  • 2022-11-02 | Tomcat9.0安装及配置教程(win10) by YUNER

    0 参考博客链接 xff1a Tomcat 9安装配置教程 https blog csdn net u011118751 article details 105394464 Tomcat9 0安装与配置 https blog csdn ne
  • 敏捷Scrum指南三:Scrum角色之SM(ScrumMaster)

    角色概述 SM主要负责帮助每个人理解并乐于接受Scrum的价值观 原则和实践 对PO和Dev Team来说 xff0c SM履行的是教练的职责 对团队的Scrum工作流来说 xff0c SM履行的是过程领导的职责 职责 Scrum教练 是S
  • 用photoshop制作指定尺寸的证件照的方法

    有些朋友会遇到一些提交指定尺寸的证件照的要求 xff0c 例如照片的宽 高 xff0c 图中头部的长度或者宽度 今天我也遇到了这个要求 xff0c 自己尝试了几种做法 现在把我觉得最简单的一个方法和大家分享 例如要求图片尺寸为70mm 50
  • 什么是高性能计算,涉及哪些技术和知识呢?

    什么是高性能计算 xff0c 涉及哪些技术和知识呢 xff1f 高性能计算 High performance computing 指通常使用很多处理器 作为单个机器的一部分 或者某一集群中组织的几台计算机 作为单个计算资源操作 的计算系统和
  • Android中批处理drawable-xxx目录中图片资源的那些事儿

    看到这个题目的时候 xff0c 我想多少有人会觉得诧异 是的 xff0c 当我在编程中需要通过代码的方式控制27张图片像幻灯片一样按固定时间顺序播放的时候 xff0c 我想把自己是如何做的记录下来和大家一起分享 xff0c 同时也是为了对抗