关于Android Bitmap.setDensity 和BitmapDrawable.setTargetDensity() 的作用:


   Bitmap.setDensity:

api文档时这样解释的:Specifies the density for this bitmap.  When the bitmap is drawn to a Canvas that also has a density, it will be scaled  appropriately.

也就是说如果我们从本地sdcard 或者网络等地方获取到一个bitmap的时候,可以对其进行进行设置density 好让在draw bitmap的时候进行适当的缩放,如果不进行设置,默认是设备的Density,如果使用默认的density,那么当把一个bitmap显示到一个ImageView上的时候就不会对其进行缩放。

说到此处那么就得简单的说一下android 对res 目录下的图片资源自动缩放的机制,比如一张图片位于res/drawable-hdpi (DENSITY_HIGH = 240)中,而手机的density 对应的是DENSITY_XHIGH = 320,那么当显示这个图片的时候就会进行放大(320/240)倍,现在应该明白了上面所说的为什        么如果不设置bitmap的density就不会对bitmap进行自动缩放,因为默认density就是设备的density两个相等,相反如果认为手动的进行设置一个和设备density不相等的值,那么就会缩放(设备density /你设置的density )倍。

这个api 一般在情况下使用呢?举个简单的例子,在开发一个app的时候,UI 切图的时候都会基于某个分辨率来切图(也就是对应某个density),如果有多套图,不同分辨率的放到不同资源目录下,如果有些情况需要把图片放到Assets 目录下,或者是动态的从网络中获取,怎么才能让图片更具分辨率或(density)自动缩放呢?那么 Bitmap.setDensity 就派上用场了


BitmapDrawable.setTargetDensity:

api 文档时这样解释的:Set the density scale at which this drawable will be rendered.

也就是说设置一个density,drawable对象将会以设置的这个density进行渲染,默认值为设备的Density ,是什么意思呢?

简单的来说,当我们创建一个BitmapDrawable 对象的时候,观察源码发现不管用那个一构造函数最终需要都是一个bitmap对象,btimap对象有一个density,BitmapDrawable 也有一个density 如果两个相等,那么就不会进行缩放,如果不相等就缩放(BitmapDrawable 的density / Bitmap 的density )倍,举个简单的例子:

如果设备的Density = 320,当我们从本地或者其他地方获取到一个bitmap对象的时候,在通过获取的bitmap对象构建一个BitmapDrawable 对象,如果都采用默认的Density,那么bitmap不进行缩放,保持原来大小,如果我们设置bitmap的density为160,设置BitmapDrawable 的density 为480

那么图片将放大 (480/ 160)= 3 倍



Caution : 以上两个属性在某些情况下将会被忽略,如果把bitmap 或者bitmapDrawable 作为background 的时候,因为这个时候缩放已经没有意义了,其大小必须和view控件一样大。

所以只有用于ImageView.setImageDrawable 或者 ImageView.setImageBitmap 并且同时设置了ImgeView.etScaleType(ScaleType.CENTER)或者imgeView.etScaleType(ScaleType.Matrix)才有效果,其他ScaleType都会更具图片和view大小来进行缩放,这样就没有意义了

更多相关文章

  1. 2021-01-12 Android对apk进行签名
  2. android EditText 不自动弹出键盘的方法
  3. Android生命周期
  4. Android(安卓)自定义设置文本字体间间距
  5. Android中获取和设置手机的壁纸
  6. Android参数设置父布局集体宽高
  7. android textView描边
  8. Android(安卓)system大小上限设置
  9. 《Android(安卓)基础(十二)》 TextInputLayout,让输入框更有灵性

随机推荐

  1. Spring Boot - XMLHttpRequest Upload(上
  2. Shell工具(cut,sed)
  3. HTML5学习的应用方向是什么
  4. 死磕Spring之AOP篇 - Spring AOP常见面试
  5. Spring Boot - axios download file(带请
  6. spring的基础包
  7. spring项目中引入AspectJ相关的Maven依赖
  8. SpringMVC工程搭建
  9. 关于Istio v1.0,你需要知道的事儿
  10. Spring简介及Spring Mvc简介