很早之前写的文章了,发在这里记录一下。
在之前的某个项目中,出现了一个奇怪的问题,所有应该获取大分辨率图片(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的终端,仍然会出现缩水或膨胀现象。
分享到:
相关推荐
Android库获取位图/可绘制对象的平均/突出颜色 如果您喜欢该库,请在上我们 Gradle 步骤1.将JitPack存储库添加到您的构建文件中 将其添加到存储库末尾的root build.gradle中: allprojects { repositories { //...
android Palette和RoundedBitmapDrawable的实践
NULL 博文链接:https://wang-peng1.iteye.com/blog/669532
BitmapDrawable bd=BitmapDrawable(bm); Android开发网提示因为BtimapDrawable是Drawable的子类,最终直接使用bd对象即可。 二、 Drawable转Bitmap 转成Bitmap对象后,可以将Drawable对象通过Android的SK库存...
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...
2. 把ImageView上的Bitmap对象从当前Activity传递到另外一个Activity中并显示出来 3. 基于串行化传递Java对象数据 首先看我是怎么实现HTTP客户端下载图片,通过异步Task接口实现HTTP客户端下载图片并通过Handler...
《Android开发艺术探索》是一本Android进阶类书籍,采用理论、源码和实践相结合的方式来阐述高水准的Android应用开发要点。《Android开发艺术探索》从三个方面来组织内容。第一,介绍Android开发者不容易掌握的一些...
这个程序是对android的部分Drawable的实现。包括了BitmapDrawable,InsetDrawable,ClipDrawable,TransitionDrawable,GradientDrawable,ScaleDrawable,LevelListDrawable,StateListDrawable,layerDrawable。 ...
AndroidQuery 一个轻量级的库,用于实现 Android 上的异步任务和操作 UI 元素。 项目含有26 个文件源文件,分析如下: auth含有: public class WebDialog extends Dialog 对话框显示网页信息 public class ...
自己找了很久网上资料,然后归纳的,所以放心下载,比较实用
本文为大家分享了Android中Drawable方法的详细使用方法,供大家参考,具体内容如下 1. BitmapDrawable相关方法: 新建在drawable目录下面,示例如下: <bitmap xmlns:android=...
本讲就要谈一谈Android中处理图形图像的最重要的一个类Drawable。Drawable就是一个可以画的对象的抽象(有点别扭,你凑合看吧),下面是它的继承关系,可以看到BitmapDrawable,AnimationDrawable等对象都是它的子类...
引言: 很久之前看到过,当时没有去仔细研究,用了之后发现并没有实现效果,今天才发现自己用错了。原来它不能设置为ImageView的src,而是应该设置为一个任意...例如,在创建状态列表或图层列表时,可以将 android:dra
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()方法...
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的转换实例详解 通常我们需要通过代码去设置图片,就需要设置图片Bitmap和Drawable的转换,下面整理了几种方式 一、Bitmap转Drawable Bitmap bm=xxx; //xxx根据你的情况获取 ...
txt读写,sqlite读写,把图片以二进制存储到sqlite和txt,再转换为图片并设置为背景图片
本文使用Matrix实现Android实现图片缩放与旋转。示例代码如下: 代码如下:package com.android.matrix;...import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.view.ViewGroup.