• 一起Talk Android吧(第三百九十三回:从drawable中获取Bitmap)


    各位看官们,大家好,上一回中咱们说的是"适配全屏幕"的例子,这一回中咱们介绍的例子是"从drawable中获取Bitmap"。闲话休提,言归正转,让我们一起Talk Android吧!

    使用背景

    我们在程序中经常使用图片资源,常用的做法是在布局文件中添加ImageView,然后在xml中给它的src属性赋值,示例如下:

    ImageView>
    
    • 1
    • 2
    • 3

    或者在java代码中通过相关方法来添加位于drawable中的资源文件,示例代码如下:

    mImageView.setImageResource(R.drawable.ic_face);
    
    • 1

    使用Bitmap

    我们刚才介绍的使用方法都是直接从drawable资源文件中加载资源,接下来将介绍如何从drawable中获取bitmap,然后再把bitmap加载到ImageView上。

    我们可以通过BitmapFactory.decodeResource()方法从drawable资源中获取bitmap文件,该方法有三个参数,第一个参数是Context对象,这个是经常使用的内容,第二参数是资源文件的名称,第三个参数是BitmapFactory.Options类型的对象,它主要用来控制控制bitmap的大小。下面是是示例代码:

    BitmapFactory.Options options = new BitmapFactory.Options();
    Bitmap mBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_face,options);
    mImageView.setImageBitmap(mBitmap);
    
    • 1
    • 2
    • 3

    使用总结

    有看官说,直接从drawable中加载图片就可以呀,为什么还要先获取bitmap再把bitmap加载到ImageView上?这样是不是绕弯路了?其实这么做主要是为了有效地控制图片资源的大小,比如我们直接从drawable中加载图片资源时不能调整图片的大小,我们只能通过调整ImageView的大小间接调整图片资源的大小,这时会产生缩放,进而影响图片的显示效果。而使用bitmap的方法可以直接控制图片的大小,具体的控制方法就在第三个参数中,详细的内容我们会在后面的章回中做介绍。

    此外,decodeResource()方法是一个重载方法,第三个参数可以省略,这时会调用只有两个参数的重载方法,不使用第三个参数的情况下采用默认的缩放原则来缩放bitmap文件,它会从drawablexxx目录中找一个与当前屏幕密度匹配的目录,然后从匹配目录中加载bitmap,进而实现缩放bitmap的目的。有看官不理解这是什么原因,因为drawablexxx目录中的图片大小不一样,所以从不同目录获取到的bitmap大小也不一样。

    看官们,关于Android中"从drawable中获取Bitmap"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!

  • 相关阅读:
    05 Mybatis官方代码生成器的使用
    MAVEN学习笔记
    【JavaEE初阶】多线程 _ 基础篇 _ Thread类的使用、线程的几个重要操作和状态
    Mysql连接池详解——实现部分
    I2C协议
    经典网络解析(三)GoogleNet | Inception块,1*1卷积核,辅助分类器 整体结构代码
    如何调用Zabbix API获取主机信息
    深入剖析多重背包问题(上篇)
    Python基本语法(未完待续)
    Flutter macOS开发教程之 界面布局与UI组件源码(教程含源码)
  • 原文地址:https://blog.csdn.net/talk_8/article/details/127455254