`

Android中屏幕Density对BitmapDrawable的影响

阅读更多

很早之前写的文章了,发在这里记录一下。

 

 

之前的某个项目中,出现了一个奇怪的问题,所有应该获取大分辨率图片(HDPI)都取成了中分辨率的图片。查看android源代码及工程代码后,发现问题出现在系统的Density上。

 

 

 

造成问题的原因:

1.manifest.xml中设置了:

<supports-screens android:anyDensity="true"/>

2.采用Drawable绘图而不是bitmap绘图。

3.使用了1.5平台API创建Drawable

 

 

 

造成问题原因的原因:

Android平台中,当程序在manifest中设置android:anyDensity="true"后,系统会对创建的bitmap进行缩放,缩放的根据就是DensityDensity的对应值如下:

 

 

Density

Value

HDPI

240

MDPI

160

LDPI

120

 

 

    缩放公式简化后的形式如下:

ScaledWidth = ActWidth * targetDensity/MDPI  

 

注:targetDensity当前设备的DensityMDPI平台默认值

 

 

因此,一张48*48的图片在LDPI下面就变成了36*36(计算:48*120/160),在HDPI上面则是72*72

 

 

到目前为止,Bitmap的创建根据Density进行缩放的机制是一切正常的,但问题就出在BitmapDrawable的创建上。BitmapDrawable的创建也会根据Density进行缩放的,但这个Density的值默认是MDPI,而更改Density值的方法只有在1.6平台API之后才有。因此,就出现了取出来的图片是正确的,但创建的BitmapDrawable出现了缩水(HDPI下)或者膨胀(LDPI下)的现象。

 

    解决方法:

    当平台为1.6以上,设置一下DrawableDensity值既可解决问题。

 

    风险:

1.对于1.5平台下,分辨率不是480*320的终端,仍然会出现缩水或膨胀现象。

 

 

 

 

2
0
分享到:
评论
1 楼 zbhcit 2011-11-04  
LZ,你好,最近也遇到了以上的问题,之前在480*320分辨率下开发都是放在drawable-mdpi文件夹下,是正常显示,最近在480*800的分辨率下开发时,图片都变大了,就像你说的膨胀了,后来发现是Density变成240的原因,之后我把图片放到drawable-hdpi中就解决了这一问题,后来我用Rect限制图片宽高也解决了,我想问的是,楼主你说的那个解决方法可否讲细化一些,或附上一个Demo,我没有看懂,多谢!!!

相关推荐

    ProminentColor:Android库获取bitmapdrawable的平均突出颜色

    Android库获取位图/可绘制对象的平均/突出颜色 如果您喜欢该库,请在上我们 Gradle 步骤1.将JitPack存储库添加到您的构建文件中 将其添加到存储库末尾的root build.gradle中: allprojects { repositories { //...

    android Palette和RoundedBitmapDrawable的实践

    android Palette和RoundedBitmapDrawable的实践

    图片比例缩放以及bitMap转BitmapDrawable

    NULL 博文链接:https://wang-peng1.iteye.com/blog/669532

    Android Bitmap和Drawable相互转换的简单代码

     BitmapDrawable bd=BitmapDrawable(bm); Android开发网提示因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。  二、 Drawable转Bitmap  转成Bitmap对象后,可以将Drawable对象通过Android的SK库存...

    Android开发艺术探索.任玉刚(带详细书签).pdf

    2.2 Android中的多进程模式 36 2.2.1 开启多进程模式 36 2.2.2 多进程模式的运行机制 39 2.3 IPC基础概念介绍 42 2.3.1 Serializable接口 42 2.3.2 Parcelable接口 45 2.3.3 Binder 47 2.4 Android中的IPC...

    Android传递Bitmap对象在两个Activity之间

    2. 把ImageView上的Bitmap对象从当前Activity传递到另外一个Activity中并显示出来 3. 基于串行化传递Java对象数据 首先看我是怎么实现HTTP客户端下载图片,通过异步Task接口实现HTTP客户端下载图片并通过Handler...

    Android开发艺术探索

    《Android开发艺术探索》是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。《Android开发艺术探索》从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些...

    android 一些Drawable的简单实现

    这个程序是对android的部分Drawable的实现。包括了BitmapDrawable,InsetDrawable,ClipDrawable,TransitionDrawable,GradientDrawable,ScaleDrawable,LevelListDrawable,StateListDrawable,layerDrawable。 ...

    android-query 开发包

    AndroidQuery 一个轻量级的库,用于实现 Android 上的异步任务和操作 UI 元素。 项目含有26 个文件源文件,分析如下: auth含有: public class WebDialog extends Dialog 对话框显示网页信息 public class ...

    Bitmap,BitmapDrawable,Drawable.doc

    自己找了很久网上资料,然后归纳的,所以放心下载,比较实用

    详解Android中Drawable方法

    本文为大家分享了Android中Drawable方法的详细使用方法,供大家参考,具体内容如下 1. BitmapDrawable相关方法: 新建在drawable目录下面,示例如下: &lt;bitmap xmlns:android=...

    Android Drawable及其相关类的使用

    本讲就要谈一谈Android中处理图形图像的最重要的一个类Drawable。Drawable就是一个可以画的对象的抽象(有点别扭,你凑合看吧),下面是它的继承关系,可以看到BitmapDrawable,AnimationDrawable等对象都是它的子类...

    安卓XML位图 – BitmapDrawable的详细用法 (android:tileMode=”repeat” 失效问题)

    引言: 很久之前看到过,当时没有去仔细研究,用了之后发现并没有实现效果,今天才发现自己用错了。原来它不能设置为ImageView的src,而是应该设置为一个任意...例如,在创建状态列表或图层列表时,可以将 android:dra

    《Android自定义组件开发详解》

    2.4、Bitmap类和BitmapDrawable类 32 2.5、Canvas类与Paint类 34 2.5.1 绘图概述 34 2.5.2 Paint类 34 2.5.3 Canvas类 39 2.6 练习作业 63 第三章 使用Graphics2D实现动态效果 64 3.1 概述 64 3.2 invalidate()方法...

    Android二维码扫描

    import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer....

    Android Drawable和Bitmap的转换实例详解

    Android Drawable和Bitmap的转换实例详解 通常我们需要通过代码去设置图片,就需要设置图片Bitmap和Drawable的转换,下面整理了几种方式 一、Bitmap转Drawable Bitmap bm=xxx; //xxx根据你的情况获取 ...

    txt、BitmapDrawable

    txt读写,sqlite读写,把图片以二进制存储到sqlite和txt,再转换为图片并设置为背景图片

    Android 图片缩放与旋转的实现详解

    本文使用Matrix实现Android实现图片缩放与旋转。示例代码如下: 代码如下:package com.android.matrix;...import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.view.ViewGroup.

Global site tag (gtag.js) - Google Analytics