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

<ImageView
    android: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);
}
  • 35
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: Hi! How can I help you with Glide today? I want to download an image using Glide in Android. Can you help me with that? Of course! I'd be happy to help you download an image using Glide in Android. To start, you'll need to add the Glide library to your project. You can do this by adding the following line to your app's build.gradle file: ``` implementation 'com.github.bumptech.glide:glide:4.11.0' ``` Once you've added the library, you can use the following code to download an image: ``` Glide.with(this) .load("https://www.example.com/image.jpg") .into(imageView); ``` Here, `this` refers to the context of your activity, and `imageView` is the ImageView where you want to display the image. Is there anything else I can help with? ### 回答2: Glide是一款适用于Android平台的图片加载框架,能够简化开发者在应用程序中下载和展示图片的工作流程。使用Glide下载图片需要以下几个步骤。 首先,需在项目的build.gradle文件中加入Glide的依赖库。可以通过在`dependencies`模块中添加`implementation 'com.github.bumptech.glide:glide:4.12.0'`来引入最新版的Glide。 接下来,在需要下载和展示图片的地方,需要创建一个Glide请求对象。使用Glide.with()方法,传入当前的`Context`对象,来获取Glide请求管理器。然后,使用`load()`方法指定图片的URL地址或资源id,来创建一个Glide请求对象。 随后,可以使用Glide请求对象中的一系列方法进行配置。比如,可以使用`placeholder()`方法设置一个占位图片,用于在图片加载完成前显示。可以使用`error()`方法设置一个错误图片,在加载失败时显示。还可以使用`override()`方法设置图片的尺寸大小。 然后,可以调用`into()`方法,将要展示图片的ImageView对象作为参数传入,将Glide请求对象与ImageView绑定起来。 最后,需要注意在适当的地方调用`Glide.with(context).pauseRequests()`方法停止请求,以免在Activity或Fragment销毁时发生内存泄漏。同时,可以在应用程序的Application类中调用`Glide.with(context).onTrimMemory()`和`Glide.with(context).onLowMemory()`方法,优化图片加载的性能。 综上所述,通过以上步骤,就可以使用Glide轻松地下载和展示图片,为Android应用程序提供良好的用户体验。 ### 回答3: Android 开发中,使用 Glide 库可以简便地下载和展示图片Glide 是一个强大、灵活、高效的图片加载库,能够帮助 Android 开发者在应用中加载、缓存、展示各种类型的图片使用 Glide 下载图片非常简单,只需几行代码即可完成。 首先,需要在项目的 build.gradle 文件中添加 Glide 的依赖项。可以在官方网站上找到最新的版本号并添加到 dependencies 部分。 接下来,在代码中使用 Glide 进行图片下载。首先,需要获取一个 ImageView 的实例,用于显示下载的图片。然后,通过调用 Glide 的 with() 方法,传入一个 Context 对象和需要下载的图片 URL,创建一个 GlideRequest 对象。最后,通过调用 GlideRequest 对象的 into() 方法,将下载的图片显示在 ImageView 中。 若需要设置特定的图片大小或占位符,可以使用 GlideRequest 对象的相应方法进行设置。例如,通过调用 override() 方法设置图片大小,调用 placeholder() 方法设置占位符等。 此外,Glide 还提供了许多其他功能,例如本地缓存、内存缓存、动画等。可以根据项目的需求对 Glide 进行更多的配置和使用。 总的来说,使用 Glide 下载图片非常方便。通过简单的几行代码,我们就能够实现图片的下载和展示,同时还可以享受 Glide 强大的额外功能。利用 Glide,我们可以轻松地加载不同来源的图片,并提升应用的性能和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值