`

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,我没有看懂,多谢!!!

相关推荐

    图片比例缩放以及bitMap转BitmapDrawable

    总结来说,图片比例缩放和Bitmap转BitmapDrawable是Android开发中的基础技能,它们涉及到内存管理、性能优化以及用户界面的美观性。理解并熟练掌握这些技巧对于构建高质量的Android应用至关重要。通过阅读博文和研究...

    Android高级应用课程所需资源

    Android系统在1.6版本引入了根据设备密度自动调整图片的功能,而在1.5版本中,如果直接使用`BitmapDrawable(Bitmap bitmap)`构造函数,系统会默认使用density为160,这就解释了为什么图片被错误地缩放。 为了解决这...

    android 滑动触摸屏幕事件

    ### Android滑动触摸屏幕事件详解 #### 一、引言 在Android开发中,触摸屏事件处理是一项重要的功能,尤其对于需要用户交互的应用程序来说更是如此。本文将深入探讨一个具体的例子,即如何通过监听触摸屏上的滑动...

    android Palette和RoundedBitmapDrawable的实践

    在Android开发中,`Palette`和`RoundedBitmapDrawable`是两个非常实用的工具,尤其在处理图像资源和用户界面的视觉效果时。`Palette`主要用于从图片中提取颜色,以便自定义UI组件的颜色风格,而`...

    Bitmap,BitmapDrawable,Drawable.doc

    Bitmap、BitmapDrawable和Drawable在Android开发中扮演着至关重要的角色,它们之间的转换是实现复杂UI效果和图像处理任务的基础。理解这些类的区别和联系,掌握它们之间的转换技巧,对于提升应用程序的性能和用户...

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

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

    Android开发者学习笔记——View、Canvas、bitmap

    在 Android 开发中,获取位图可以使用 BitmapDrawable 或 BitmapFactory 两种方式。首先,需要获取资源:`Resources res = getResources();` 使用 BitmapDrawable 获取位图可以通过以下两种方式: 1. 使用 ...

    Android实现简易猴子摘桃功能图片资源

    1. **Drawable资源**:在Android中,Drawable是一种可以绘制到屏幕上的对象,它可以是位图(BitmapDrawable)、形状(ShapeDrawable)、颜色(ColorDrawable)等。在本案例中,猴子和桃子的图片会被封装为...

    Android:Drawable样式和尺寸单位源代码

    在Android开发中,Drawable是图形和图像的基本容器,它允许开发者创建、管理和显示各种图形对象,如颜色、形状、位图等。理解Drawable及其样式代码对于构建美观且功能丰富的用户界面至关重要。本篇文章将深入探讨...

    txt、BitmapDrawable

    在Android中,`Bitmap`是表示图像的基本类,而`BitmapDrawable`是将Bitmap显示为视图背景或图像资源的包装类。将图片从数据库中读取出来后,需要先转换为`Bitmap`,这可以通过`BitmapFactory.decodeByteArray()`完成...

    android中动态壁纸

    在Android操作系统中,动态壁纸(Dynamic Wallpaper)是一种增强传统静态壁纸功能的技术,它允许用户将交互式、动画化的背景设置为手机或平板电脑的主屏幕。动态壁纸不仅可以展示美丽的视觉效果,还可以根据用户的...

    Android中使用自定义ImageView实现图片圆形遮罩效果

    在Android开发中,为了实现独特的视觉效果,我们经常需要对默认控件进行扩展,自定义控件就是一种常见的做法。本篇文章将详细讲解如何在Android中通过自定义一个ImageView来实现图片的圆形遮罩效果。这个功能对于...

    android 海报拖动特效

    在Android开发中,为了提升应用的用户体验和视觉吸引力,开发者经常会在界面设计中加入各种动态效果。"android 海报拖动特效"就是一个这样的例子,它使得用户在浏览海报或者图片时,能够享受到流畅且富有创意的交互...

    android拍照剪切显示到imageView中

    在Android应用开发中,"android拍照剪切显示到imageView中"是一个常见的需求,涉及到相机权限、图片处理和UI展示等多个方面。以下是对这个主题的详细解释: 1. **相机权限**: 在Android 6.0(API级别23)及以上...

    Android 学习资料

    3. **BitmapDrawable 详解**:BitmapDrawable是Android中用于显示位图图像的绘图对象。这篇文档可能会详细介绍如何加载、操作和优化位图,以避免内存泄漏和提高应用性能。 4. **android-页面跳转_百度文库_files**...

    Android中Drawable分类汇总

    在Android开发中,Drawable是用于绘制图形的资源,它们被广泛应用于各种界面元素的背景或图片显示。Drawable资源是抽象的图形对象,可以包括图片、颜色、渐变等多种形式。在Android SDK中,开发者通常不需要直接操作...

    Android 实现对话框圆角 模糊图片功能

    在Android开发中,创建具有个性化视觉效果的对话框可以提升用户体验。本文将深入探讨如何在Android Studio中实现对话框的圆角以及毛玻璃模糊效果,这两种特性常常被用于提升界面的美观度和交互性。 首先,让我们...

    android 滑动开关 SlipButton

    为了保证兼容性,开发者需要考虑不同屏幕尺寸和分辨率的影响,以及适配Android的不同版本。此外,对于无障碍功能的支持也是必要的,确保滑动开关对辅助技术友好。 总结来说,Android滑动开关SlipButton的实现涉及到...

    Android中View的炸裂特效实现方法详解

    在Android开发中,实现独特的视觉效果能够提升用户体验,其中“炸裂特效”是一个吸引用户注意力的有趣元素。本文将深入探讨如何在Android中实现View的炸裂特效,主要基于开源组件ExplosionField。 首先,...

    android中的drawable集合

    以下是对Android中drawable集合的详细解释: 1. **Bitmap Drawable**: Bitmap Drawable是最基本的Drawable类型,用于显示位图资源。它可以是从本地文件系统、网络或资源文件中加载的PNG、JPEG等格式的图片。...

Global site tag (gtag.js) - Google Analytics