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;

(上記のオプションを使用して作成されたビットマット)

上記のコードを使用すると、次の結果が得られます........

  • タブレット デバイスにカラー バンディングが表示されない
  • テスト用の携帯端末 (Samsung 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 に固執する必要がありますか?) またはディザリングでそれを整理する必要がありますか? (ご覧のとおり、有効にしていますが、役に立たないようです)。

バンディングが常にエースにある理由は何ですか? ハードウェアの制限でしょうか?

これは非常に混乱しています。

(PS私は公式ガイドを読んだことがあります.SOに質問を投稿する前に常にそれを見たり、他の関連するSOの質問を見たりしますが、公式ガイドは(あまりにも頻繁にそうであるように)、これを明確にしません私と私は他の質問で答えを見つけることができなかったので、すでにここにある場合は申し訳ありません)。

4

2 に答える 2

5

565 形式は、より速く描画でき、必要な処理能力が少ないため、デフォルトです。SG Ace に関して言えば、しばらく前に Android の特定のバージョンのみが 8888 色をサポートしていたと思います。

アプリの背景の 1 つを帯状にしないようにするには、次のことを行う必要がありました。

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_56516ビットカラーフォーマットです。ARGB_8888は 32 ビット形式です。

getHolder().setFormat();選択した構成や描画方法に関係なくARGB_8888、ビットマップはRGB_565形式のビットマップよりも (メモリ内で) かなり大きくなります。

于 2013-03-02T18:45:50.653 に答える