6
    getHolder().setFormat(PixelFormat.RGBA_888);        

    Options options = new BitmapFactory.Options();       
    options.inDither=true;                               
    options.inScaled = true; 
    options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
    options.inPurgeable=true;

(使用上述选项创建的位图)

使用上面的代码时,我得到以下结果.........

  • 我的平板电脑上没有色带
  • 测试手机上出现明显的色带(三星 Galaxy Ace)

    getHolder().setFormat(PixelFormat.RGBA_888);        
    
    Options options = new BitmapFactory.Options();       
    options.inDither=true;                               
    options.inScaled = true; 
    options.inPreferredConfig = Bitmap.Config.ARGB_565; 
    options.inPurgeable=true;
    
  • 我的平板电脑上没有色带

  • Galaxy Ace 上有明显的色带
  • 结果与上述相同

    getHolder().setFormat(PixelFormat.RGB_565);     
    
    Options options = new BitmapFactory.Options();       
    options.inDither=true;                               
    options.inScaled = true; 
    options.inPreferredConfig = Bitmap.Config.RGB_565; 
    options.inPurgeable=true;
    
  • 我的平板电脑上的色带

  • SG Ace 上的色带

    getHolder().setFormat(PixelFormat.RGB_565);     
    
    Options options = new BitmapFactory.Options();       
    options.inDither=true;                               
    options.inScaled = true; 
    options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
    options.inPurgeable=true;
    
  • 我的平板电脑上的色带

  • SG Ace 上的色带

所以,总而言之,只有 PixelFormat.xxxx 部分似乎有任何区别。我的理解是,这是设置支架颜色格式。这将影响绘制的所有内容。(即,一切都将采用这种格式)。

有人可以解释下一行的目的是什么吗?

options.inPreferredConfig = Bitmap.Config.xxxxxxx

这似乎对已绘制的位图没有任何影响。

性能是最重要的,所以我可能必须更改我的原始 png 文件,使它们没有渐变,(即,将它们绘制为 RGB565 - 这是可取的还是我应该坚持使用 8888?)还是应该抖动解决?(因为如您所见,我启用了它,但似乎没有帮助)。

知道为什么 Ace 上总是有条带吗?会不会是硬件限制?

谢谢这一切都非常令人困惑。

(PS 我已经阅读了官方指南,在向 SO 发布问题以及查看其他相关的 SO 问题之前,我总是会查看该指南,但是官方指南(通常是这种情况)并没有明确这一点我和我无法通过其他问题找到答案,所以如果它已经在这里道歉)。

4

2 回答 2

5

565 格式是默认的,因为它可以更快地绘制并且需要更少的处理能力。至于你的 SG Ace,我相信不久前只有某些版本的 Android 支持 8888 色。

为了让我的应用程序背景之一不带,我必须执行以下操作:

1 - 将背景添加到可绘制文件夹

2 - 使用以下内容创建 background_dithered.xml:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:antialias="true"
    android:dither="true"
    android:src="@drawable/background" />

3 - 在活动代码中:

@Override
public void onAttachedToWindow() {
        super.onAttachedToWindow();

        getWindow().setFormat(PixelFormat.RGBA_8888);
}       
于 2013-03-02T18:45:36.893 回答
2

有人可以解释下一行的目的是什么吗?

options.inPreferredConfig = Bitmap.Config.xxxxxxx

这似乎对已绘制的位图没有任何影响。

不同Bitmap的配置会有不同的内存占用。RGB_565是 16 位颜色格式。ARGB_8888是 32 位格式。

无论getHolder().setFormat();您选择了哪种配置,或者它是如何绘制的,位图(在内存中)在格式上ARGB_8888都会比位图大得多。RGB_565

于 2013-03-02T18:45:50.653 回答