很早之前写的文章了,发在这里记录一下。
在之前的某个项目中,出现了一个奇怪的问题,所有应该获取大分辨率图片(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进行缩放,缩放的根据就是Density。Density的对应值如下:
Density
|
Value
|
HDPI
|
240
|
MDPI
|
160
|
LDPI
|
120
|
缩放公式简化后的形式如下:
ScaledWidth = ActWidth * targetDensity/MDPI
注:targetDensity当前设备的Density;MDPI平台默认值
因此,一张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以上,设置一下Drawable的Density值既可解决问题。
风险:
1.对于1.5平台下,分辨率不是480*320的终端,仍然会出现缩水或膨胀现象。
分享到:
相关推荐
总结来说,图片比例缩放和Bitmap转BitmapDrawable是Android开发中的基础技能,它们涉及到内存管理、性能优化以及用户界面的美观性。理解并熟练掌握这些技巧对于构建高质量的Android应用至关重要。通过阅读博文和研究...
Android系统在1.6版本引入了根据设备密度自动调整图片的功能,而在1.5版本中,如果直接使用`BitmapDrawable(Bitmap bitmap)`构造函数,系统会默认使用density为160,这就解释了为什么图片被错误地缩放。 为了解决这...
### Android滑动触摸屏幕事件详解 #### 一、引言 在Android开发中,触摸屏事件处理是一项重要的功能,尤其对于需要用户交互的应用程序来说更是如此。本文将深入探讨一个具体的例子,即如何通过监听触摸屏上的滑动...
在Android开发中,`Palette`和`RoundedBitmapDrawable`是两个非常实用的工具,尤其在处理图像资源和用户界面的视觉效果时。`Palette`主要用于从图片中提取颜色,以便自定义UI组件的颜色风格,而`...
Bitmap、BitmapDrawable和Drawable在Android开发中扮演着至关重要的角色,它们之间的转换是实现复杂UI效果和图像处理任务的基础。理解这些类的区别和联系,掌握它们之间的转换技巧,对于提升应用程序的性能和用户...
Android库获取位图/可绘制对象的平均/突出颜色 如果您喜欢该库,请在上我们 Gradle 步骤1.将JitPack存储库添加到您的构建文件中 将其添加到存储库末尾的root build.gradle中: allprojects { repositories { //...
在 Android 开发中,获取位图可以使用 BitmapDrawable 或 BitmapFactory 两种方式。首先,需要获取资源:`Resources res = getResources();` 使用 BitmapDrawable 获取位图可以通过以下两种方式: 1. 使用 ...
1. **Drawable资源**:在Android中,Drawable是一种可以绘制到屏幕上的对象,它可以是位图(BitmapDrawable)、形状(ShapeDrawable)、颜色(ColorDrawable)等。在本案例中,猴子和桃子的图片会被封装为...
在Android开发中,Drawable是图形和图像的基本容器,它允许开发者创建、管理和显示各种图形对象,如颜色、形状、位图等。理解Drawable及其样式代码对于构建美观且功能丰富的用户界面至关重要。本篇文章将深入探讨...
在Android中,`Bitmap`是表示图像的基本类,而`BitmapDrawable`是将Bitmap显示为视图背景或图像资源的包装类。将图片从数据库中读取出来后,需要先转换为`Bitmap`,这可以通过`BitmapFactory.decodeByteArray()`完成...
在Android操作系统中,动态壁纸(Dynamic Wallpaper)是一种增强传统静态壁纸功能的技术,它允许用户将交互式、动画化的背景设置为手机或平板电脑的主屏幕。动态壁纸不仅可以展示美丽的视觉效果,还可以根据用户的...
在Android开发中,为了实现独特的视觉效果,我们经常需要对默认控件进行扩展,自定义控件就是一种常见的做法。本篇文章将详细讲解如何在Android中通过自定义一个ImageView来实现图片的圆形遮罩效果。这个功能对于...
在Android开发中,为了提升应用的用户体验和视觉吸引力,开发者经常会在界面设计中加入各种动态效果。"android 海报拖动特效"就是一个这样的例子,它使得用户在浏览海报或者图片时,能够享受到流畅且富有创意的交互...
在Android应用开发中,"android拍照剪切显示到imageView中"是一个常见的需求,涉及到相机权限、图片处理和UI展示等多个方面。以下是对这个主题的详细解释: 1. **相机权限**: 在Android 6.0(API级别23)及以上...
3. **BitmapDrawable 详解**:BitmapDrawable是Android中用于显示位图图像的绘图对象。这篇文档可能会详细介绍如何加载、操作和优化位图,以避免内存泄漏和提高应用性能。 4. **android-页面跳转_百度文库_files**...
在Android开发中,Drawable是用于绘制图形的资源,它们被广泛应用于各种界面元素的背景或图片显示。Drawable资源是抽象的图形对象,可以包括图片、颜色、渐变等多种形式。在Android SDK中,开发者通常不需要直接操作...
在Android开发中,创建具有个性化视觉效果的对话框可以提升用户体验。本文将深入探讨如何在Android Studio中实现对话框的圆角以及毛玻璃模糊效果,这两种特性常常被用于提升界面的美观度和交互性。 首先,让我们...
为了保证兼容性,开发者需要考虑不同屏幕尺寸和分辨率的影响,以及适配Android的不同版本。此外,对于无障碍功能的支持也是必要的,确保滑动开关对辅助技术友好。 总结来说,Android滑动开关SlipButton的实现涉及到...
在Android开发中,实现独特的视觉效果能够提升用户体验,其中“炸裂特效”是一个吸引用户注意力的有趣元素。本文将深入探讨如何在Android中实现View的炸裂特效,主要基于开源组件ExplosionField。 首先,...
以下是对Android中drawable集合的详细解释: 1. **Bitmap Drawable**: Bitmap Drawable是最基本的Drawable类型,用于显示位图资源。它可以是从本地文件系统、网络或资源文件中加载的PNG、JPEG等格式的图片。...