Android:资源的管理,Glide图片加载框架的使用

目录

一,Android资源分类

1.使用res目录下的资源

res目录下资源的使用:

2.使用assets目录下的资源

assets目录下的资源的使用:

二,glide图片加载框架

1.glide简介

 2.下载和设置

3.基本用法

 4.占位符(Placeholders)

 5.转换(Transformations)

 6.缓存策略(Caching Strategies)


一,Android资源分类

        Android应用中用到的各种用户自定义资源(包括字符串、颜色值、布局等)都集中放到res目录(或assets)下,以实现Android应用MVC分离的目的,而应用程序可以直接使用这些资源。Android中这些资源分为两类:可直接访问资源和不可直接访问资源;

可直接访问资源:即可以使用R类资源访问的资源,放在res目录下;

不可直接访问资源:无法直接访问的原生资源,放在assets目录下,只能通过AssetManager来处理;

1.使用res目录下的资源

res目录下可使用的资源有:

res子目录可以存放的资源
anim定义补间动画的xml文件
drawable各种位图文件(png、jpg、gif、9-Patch)可以编译成drawable对象的xml文件
mipmap应用程序launcher图标
layout用户界面布局文件
menu菜单资源布局文件(选项菜单,子菜单,上下文菜单)
raw任意类型的原生资源
values各种常量资源的xml文件(颜色,字符串,长度,主题等)
xml其它任意的XML文件(可能没有特殊意义的XML文件)

res目录下资源的使用:

(1)在其他资源文件中使用res目录下的资源:@[<pack_name>:]<res_type>/<res_name>,例如使用mimap包下的图片pic:@mipmap/pic

<ImageViewandroid:id="@+id/img_netImg"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/pic"/>

(2)在java代码中使用res目录下的资源:[<pack_name>.]R.res_type.res_name,最常见的便是oncreate方法中的setContentView加载布局方法,传入的参数便是layout布局xml文件:

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
}

2.使用assets目录下的资源

        assets目录下也可以添加Android应用中所使用的资源,这些资源可以是任意格式的,且可以位于assets目录中的任意位置。 assets目录中可以建立子目录,建立更灵活的目录结构。 assets目录中的文件格式是任意的,不一定必须是XML文件。

        assets/目录下的文件与res/raw/目录下文件区别:(1)assets/目录下文件不会被R类索引,即assets/目录下资源不能使用Resources对象获取。 (2)assets/目录下资源不会被打包到APK中,即assets目录中适合存放过大的文件。

assets目录下的资源的使用:

        assets目录下的资源不会被R类处理,一般是通过getAssets()方法获得AssetManager对象,然后再加载指定资源。

AssetManager assetManager = getAssets();

AssetManager对象中的常用方法:

方法名描述
String[] list(String path)以字符串数组的形式返回path目录下的所有文件(若path为空,则表示asets目录)
InputStream open(String filename)打开指定filename表示的文件流,返回该输入流
XmlResourceParser openXmlResourceParser(String filename)从assets目录下的fileName文件中加载XML解析器
void close()关闭当前AssetManager对象

 示例,访问assets目录下的图片:

private void getAssetsImage() {AssetManager assetManager = getAssets();//获取Assetmanager对象try {InputStream inputStream = assetManager.open("pic2.png");//获取图片文件输入流Bitmap bitmap = BitmapFactory.decodeStream(inputStream);//封装成bitmap对象img_assets.setImageBitmap(bitmap);//给控件设置图片} catch (IOException e) {throw new RuntimeException(e);}
}

二,glide图片加载框架

1.glide简介

        Glide是一个快速高效的Android图片加载库,注重于平滑的滚动。 Glide提供了易用的API,统一了显示本地图片和网络图片的接口。

Glide使用了多个步骤来确保在Android上加载图片尽可能的快速和平滑:

  1. 自动、智能地下采样(downsampling)和缓存(caching),以最小化存储开销和解码次数;
  2. 积极的资源重用,例如字节数组和Bitmap,以最小化昂贵的垃圾回收和堆碎片影响;
  3. 深度的生命周期集成,以确保仅优先处理活跃的Fragment和Activity的请求,并有利于应用在必要时释放资源以避免在后台时被杀掉;

 2.下载和设置

glide源码地址:GitHub - bumptech/glide: An image loading and caching library for Android focused on smooth scrolling

glide的下载:在build.gradle的dependencies添加依赖:implementation 'com.github.bumptech.glide:glide:4.13.2',然后在弹出的提示框中点击同步即可自动下载。

设置权限:在AndroidManifest.xml文件中设置权限;

(1)访问网络权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

(2)从本地文件夹或 DCIM 或图库中加载图片的权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

(3)将 Glide 的缓存存储到SD 卡上的权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

3.基本用法

glide只需用三个api就可实现对本地图片和网络图片的访问:

  1. with():参数可以是上下文,Activity,Fragment,FragmentActivity;
  2. load():参数可以是本地图片地址,网络图片url,bitmap,drawable对象,图片文件等;
  3. into():指定图片在哪个imageView中显示;
private void getNetImg() {Glide.with(this).load("https://i0.hdslb.com/bfs/article/38aad4e7c4ca2048b95aa6659fb1fcaf43d0f597.gif")//网络图片url.into(img_netImg);
}

 4.占位符(Placeholders)

        当我们加载图片时,并不只有加载成功一种情况,为带给用户良好体验,在没有加载成功时,我们应给用户一些反馈,Glide允许用户指定三种不同类型的占位符,分别在三种不同场景使用:

  1. placeholder():设置图片加载完成之前的状态;
  2. error():设置图片加载失败的状态;
  3. fallback():设置图片为空(null)时的状态;
private void getNetImg() {Glide.with(this).load("https://i0.hdslb.com/bfs/article/38aad4e7c4ca2048b95aa6659fb1fcaf43d0f597.gif").placeholder(R.mipmap.loading)//设置图片加载完成之前的状态.error(R.mipmap.error)//设置图片加载失败的状态.fallback(R.mipmap.nullpic)//设置图片为空的状态.into(img_netImg);
}

 5.转换(Transformations)

        有时,我们需要对图片进行一些修改,在Glide中,Transformations 可以获取资源图片并修改它,然后返回被修改后的资源。通常转换操作是用来完成剪裁或对位图应用过滤器。

glide提供了很多内置的转换,包括:

  1. CenterCrop:缩放图片以满足ImageView的尺寸,超过ImageView的部分将会被裁剪掉,因此最终图片可能不完全显示;
  2. FitCenter:保持原图片的比例进行缩放,直到可以在ImageView中尺寸区域内完全显示图片。图片能够完全显示,比例保持不变,但是可能图片无法完全覆盖ImageView的区域;
  3. CircleCrop:以最大的内切圆裁剪图片,一般在设置头像时使用;
private void getNetImg() {Glide.with(this).load("https://i0.hdslb.com/bfs/article/38aad4e7c4ca2048b95aa6659fb1fcaf43d0f597.gif").circleCrop()//设置图片为圆形.into(img_netImg);
}

 

 6.缓存策略(Caching Strategies)

        使用glide加载过的图片会被缓存起来,通过diskCacheStrategy()方法可以设置缓存策略,glide提供了以下五种缓存策略:

  1. DiskCacheStrategy.AUTOMATIC:默认缓存,根据图片资源自动选择缓存策略
  2. DiskCacheStrategy.ALL:缓存原始图片和转换后的图片
  3. DiskCacheStrategy.DATA:只缓存原始图片
  4. DiskCacheStrategy.RESOURCE:只缓存转换后的图片
  5. DiskCacheStrategy.NONE:不缓存
private void getNetImg() {Glide.with(this).load("https://i0.hdslb.com/bfs/article/38aad4e7c4ca2048b95aa6659fb1fcaf43d0f597.gif").diskCacheStrategy(DiskCacheStrategy.ALL)//缓存全部.into(img_netImg);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/697132.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件夹重命名高效批量技巧:轻松实现在文件夹名称左边添加关键字

在日常工作和生活中&#xff0c;我们经常需要对大量的文件夹进行重命名&#xff0c;以便更好地组织和管理文件。然而&#xff0c;手动一个接一个地修改文件夹名称既费时又费力。幸运的是&#xff0c;有一些高效的批量重命名技巧可以帮助我们快速实现这一目标&#xff0c;特别是…

Python管理PVE(Proxmox VE)云平台--节点资源统计

一、前言 写本脚本的初衷是因手动查看统计已分配的PVE资源过于耗时&#xff0c;因此写一个脚本一劳永逸&#xff0c;具体实现方法&#xff1a;利用Python的paramiko模块进行远程命令查看、统计PVE平台各节点已分配的cpu、内存、磁盘空间。 二、步骤 1.构建shell脚本 1.1 统计…

【LangChain学习之旅】—(21)聊天客服机器人的开发(上)

【LangChain学习之旅】—(21)聊天客服机器人的开发(上) “聊天机器人”说明项目的技术实现细节技术实现步骤简述第二步:增加记忆机制第三步:增加检索机制总结“聊天机器人”说明 聊天机器人(Chatbot)是 LLM 和 LangChain 的核心用例之一,很多人学习大语言模型,学习 …

Redis:分布式系统

文章目录 认识RedisRedis和MySQLRedis的场景Redis的设计 分布式单机架构应用数据分离架构应用服务集群架构 认识Redis 在开始Redis学习前&#xff0c;要先认识一下Redis Redis的设计&#xff0c;是想要把它当做是一个数据库&#xff0c;一个缓存&#xff0c;或者说是一个消息…

Selenium + Pytest自动化测试框架实战(下)

前言 本文接上篇文章哟。 一、简单学习元素定位 在日常的工作中&#xff0c;我见过很多在浏览器中直接在浏览器中右键Copy Xpath复制元素的同学。这样获得的元素表达式放在 webdriver 中去运行往往是不够稳定的&#xff0c;像前端的一些微小改动&#xff0c;都会引起元素无法…

采油厂职工向媒体投稿的好方法找到了

作为一名采油厂的职工,我深知在媒体上定期投稿的重要性。这不仅是我们展示工作成果、传播企业文化的重要途径,更是上级考核我们工作表现的一项指标。然而,在投稿的过程中,我经历了不少心酸与困扰。 起初,我采用传统的邮箱投稿方式。每天,我都会花费大量时间在网络上搜索合适的媒…

浏览器执行渲染原理

一、事件循环 事件循环&#xff08;Event Loop&#xff09;是JavaScript的执行环境的核心概念之一&#xff0c;它负责处理JavaScript中的异步操作和执行顺序。事件循环使得JavaScript能够在单线程上有效地处理并发&#xff0c;同时保持编程模型的简单性。 以下是事件循环的一…

直播预告 | 明晚19:00,「低代码开放麦」6家低代码领军者线上论道

⏰5月14日晚19:00-20:30【低代码开放麦】邀请到 华为云Astro低代码产品经理高妍 得帆信息aPaaS业务线副总裁&PMO总监 李健达 上海博科Yigo平台研发部总经理、副总裁周志军 零赛云生态发展总监徐健林 普元信息事业部副总经理郝振明 致远互联高级咨询总监纪闪 线上论道…

netstat命令详解

netstat网络连接分析工具 工具说明&#xff1a; netstat 是一款命令行工具&#xff0c;主要是用于列出系统上所有的网络套接字连接情况&#xff0c;包括 tcp, udp 以及 unix 套接字&#xff0c;另外它还能列出处于监听状态&#xff08;即等待接入请求&#xff09;的套接字。除…

【linux-IMX6ULL-uboot初次编译及烧录

目录 1. uboot基本概念1. 1 uboot的编译 3. uboot的烧录2. uboot的烧录结果 第一次不进行原理性的探究&#xff0c;也不关注源码内容&#xff0c;只是进行一个直观的了解&#xff0c;对uboot进行初次编译并进烧录到IMX6ULL板卡中 1. uboot基本概念 U-Boot&#xff08;Universa…

RobbitMQ基本消息队列的消息接收

1.先给工程引入依赖 父工程有了子工程就不用导了 <!--AMQP依赖&#xff0c;包含RabbitMQ--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 2.配置yml…

2024电商数据资料汇总

2024年跨境电商&#xff1a;连接全球市场的新纪元 随着全球数字化进程的不断推进&#xff0c;跨境电商已经成为了国际贸易的重要组成部分。2024年&#xff0c;跨境电商行业迎来了一系列挑战和机遇&#xff0c;塑造了全新的市场格局。 跨境电商市场规模的持续扩大 2024年&…