私はジンジャーブレッド(2.3.3)デバイスに取り組んでいます。矢印の図を含む ImageView があり、背景に描画する必要がある完全に透明な背景があります。問題は、ImageView の境界ボックスの下に「シェーディング」アーティファクトがあることです。
次の画像をよく見ると、私が話しているアーティファクトが表示されます: 1
前景画像と背景画像の両方にアルファ チャネルがあるため、ARGB8888 としてデコードされます (リソースを手動でビットマップにデコードし、ARGB8888 を示すビットマップ構成を出力して、それぞれのビューに割り当てて、これを再確認しました)。また、setContentView() を呼び出す前に、Activitiy のウィンドウを PixelFormat.RGBA_8888 に構成しました。
ビットマップを ARGB8888 としてデコードすることや、ウィンドウを RGBA_8888 に設定することを提案するスレッドを紹介しないでください。両方の解決策を試しましたが、役に立ちませんでした。
この問題を解決するにはどうすればよいですか?
編集:
ウィンドウのピクセル形式とドローアブルを設定する関数は次のとおりです (onCreate() から直接呼び出されます):
public void testTransparency() { getWindow().setFormat(PixelFormat.RGBA_8888); setContentView(R.layout.transparency_test); LinearLayout ll = (LinearLayout)findViewById(R.id.ll); Bitmap bgBmp = BitmapFactory.decodeResource(getResources(), R.raw.bg); Log.d(TAG,"BG BMP Config: " + bgBmp.getConfig()); ll.setBackgroundDrawable(new BitmapDrawable(bgBmp)); ImageView iv = (ImageView)findViewById(R.id.iv); iv.setBackgroundDrawable(null); Bitmap arrowBmp = BitmapFactory.decodeResource(getResources(), R.raw.big_arrow); Log.d(TAG,"Arrow BMP Config: " + arrowBmp.getConfig()); iv.setImageBitmap(arrowBmp); }
そして、これが私のテストで使用している(非常に単純な)レイアウトです。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center">
<ImageView android:id="@+id/iv"
android:layout_width="72dp"
android:layout_height="120dp"
/></LinearLayout>
「bg」リソースは2
にあり
ます。「big_arrow」リソースは「http://i.imgur.com/3V6QU.png」にあります。
編集 2:
エミュレーターでも、N1 (2.3.4) または XOOM (3.2.1) でも問題を再現できないことがわかりました。ここから続く 2 つのオプションがあります:
1. 問題はデバイス固有 (私が取り組んでいる Android ベースのアプライアンス) です
。
ありがとう。