2010-07-14 63 views
0

我在GIMP中为我的应用程序创建了背景.png。它的分辨率是640x480,它来自Google搜索,似乎是默认模拟器的分辨率。我的问题是,当我将RelativeLayout的背景应用于android:[email protected]/bg并运行它时,图像中出现很多伪像。仿佛模拟器无法提供足够的颜色来正确显示.png。这里发生了什么?RelativeLayout中的背景图像有文物

P.S.这个图像没什么特别,只是简单的线条和径向渐变。

回答

0

它的分辨率是640×480,它从 google搜索,似乎是默认的模拟器

640×480分辨率 甚至没有在Android的官方支持的分辨率,更何况是一个“默认”一。以下是supported resolutions的列表。

此外,你想看你的颜色深度。我忘记了细节,但由于LCD的局限性,并非所有东西都可以处理24位颜色。

+0

Android似乎只支持16位颜色。 – dfetter88 2010-07-14 22:40:37

+0

另外,如果图像放置在/ res/raw /中而不是res/drawable /,它将不会在构建时进行优化。这为图像质量提供了一些改进。 – dfetter88 2010-07-15 02:36:20

+1

@ dfetter88:这听起来像是你正在经历不同屏幕密度的图像自动调整大小。理想情况下,你提供每个密度的原始图像。如果没有,使用'raw/drawable-nodpi /'来绘制一个不会被重新缩放的drawable资源。 – CommonsWare 2010-07-15 12:12:17

0

我收集了3级可能的解决方案:

  1. 对你有,创建并在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" /> 
    
  2. 把有问题的图像中的可绘制-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); 
    
  3. 如果该文件是PNG文件,采取的像素即至少noticable(例如左下),并改变其不透明度为254代替255.

    这种方法的缺点是它使图像占用更多空间,并改变图像本身。

所有的方法都可以在galaxy s和galaxy s2上使用android 2.3.x。