我在GIMP中为我的应用程序创建了背景.png。它的分辨率是640x480,它来自Google搜索,似乎是默认模拟器的分辨率。我的问题是,当我将RelativeLayout
的背景应用于android:[email protected]/bg
并运行它时,图像中出现很多伪像。仿佛模拟器无法提供足够的颜色来正确显示.png。这里发生了什么?RelativeLayout中的背景图像有文物
P.S.这个图像没什么特别,只是简单的线条和径向渐变。
我在GIMP中为我的应用程序创建了背景.png。它的分辨率是640x480,它来自Google搜索,似乎是默认模拟器的分辨率。我的问题是,当我将RelativeLayout
的背景应用于android:[email protected]/bg
并运行它时,图像中出现很多伪像。仿佛模拟器无法提供足够的颜色来正确显示.png。这里发生了什么?RelativeLayout中的背景图像有文物
P.S.这个图像没什么特别,只是简单的线条和径向渐变。
它的分辨率是640×480,它从 google搜索,似乎是默认的模拟器
640×480分辨率 甚至没有在Android的官方支持的分辨率,更何况是一个“默认”一。以下是supported resolutions的列表。
此外,你想看你的颜色深度。我忘记了细节,但由于LCD的局限性,并非所有东西都可以处理24位颜色。
我收集了3级可能的解决方案:
对你有,创建并在XML使用位图绘制每个有问题的图像。
缺点是你创建了多个文件。我测试了其他特殊标志(包括代码更改),并没有注意到任何区别。
RES /抽拉/ image_file.xml
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/problematic_image" />
把有问题的图像中的可绘制-nodpi文件夹。缺点是它会以这种方式使用更多的RAM,因为它不会根据密度进行缩减。类似的方法可以在代码来完成:
final BitmapFactory.Options options = new BitmapFactory.Options(); options.inDensity = 1; options.inSampleSize = 1; options.inTargetDensity = 1; options.inJustDecodeBounds = false; final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.problematic_image, options); imageView.setImageBitmap(bitmap);
如果该文件是PNG文件,采取的像素即至少noticable(例如左下),并改变其不透明度为254代替255.
这种方法的缺点是它使图像占用更多空间,并改变图像本身。
所有的方法都可以在galaxy s和galaxy s2上使用android 2.3.x。
Android似乎只支持16位颜色。 – dfetter88 2010-07-14 22:40:37
另外,如果图像放置在/ res/raw /中而不是res/drawable /,它将不会在构建时进行优化。这为图像质量提供了一些改进。 – dfetter88 2010-07-15 02:36:20
@ dfetter88:这听起来像是你正在经历不同屏幕密度的图像自动调整大小。理想情况下,你提供每个密度的原始图像。如果没有,使用'raw/drawable-nodpi /'来绘制一个不会被重新缩放的drawable资源。 – CommonsWare 2010-07-15 12:12:17