5

スプラッシュスクリーンには、白い背景を含む画像を使用します(純粋な白-Photoshopでチェック)。スクリーンショットに示されているように、何らかの理由で、アクティビティのデフォルトの白いbgに対してわずかに緑のbgが表示されます。のような一部のデバイスでのみ

ImageViewグラフィックは、画像が白を使用しているにもかかわらず、白の背景を表示するようになりました

これをフレームレイアウトの単一ビューとしてアクティビティに追加します。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

<ImageView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scaleType="fitCenter"
    android:src="@drawable/splashscreen" />

</FrameLayout>

何か案が?RGB888とRGB565の問題について読みましたが、適切な解決策が見つかりませんでした。

注:画像の白を透明に変更することはできますが、問題を理解して適切な解決策を見つけたいと思います。

4

6 に答える 6

9

これは本当に迷惑です。すべての32ビットディスプレイに表示されるはずのこの問題に遭遇した人が非常に少ないのはなぜだろうか。

あなたはRGB888フォーマットについて正しく言及しました。この問題の原因は、APKファイルの元のビットマップ形式に関係なく、すべてのビットマップが圧縮されていることです(私の場合、インデックス付きの256色!wtf?)。

それを防ぐ方法が見つからなかったので、誰かが適切な解決策を知っているなら、教えてください。

しかし、私は白色の問題に対して2つの解決策を見つけました。

1)ビットマップごと:たとえば、と呼ばれる描画可能なビットマップリソースが@drawable/mypngあり、これが問題の原因です。XMLドローアブルdrawable/mypng_nofilter.xmlを追加する必要があります

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/mypng"
    android:filter="false"
/>

@drawable/mypng_nofilter代わりに使用してください。

2)アクティビティ全体の場合:アクティビティonCreateメソッドで、追加する必要があります

getWindow().setFormat(PixelFormat.RGB_565);

これで、ウィンドウの色深度は16ビットになり、すべてのビットマップは「適切に」白で表示されます。

繰り返しになりますが、32ビットの色深度が必要ですが、コンパイル時の画像圧縮を制御する方法がわかりません。

于 2012-05-29T10:54:18.947 に答える
2

Bitmap.CompressFormatタイプを次PNGの代わりに変更することで、この問題を解決しましたJPEG

Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.nouv);
Bitmap bitmap = (Bitmap)((BitmapDrawable) drawable).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
于 2012-06-26T08:15:07.070 に答える
0

ネットワークにロードされた画像でも同じ問題が発生しました。ビットマップフィルターを無効にすることで問題を解決しました。ICS以降のデバイスでは問題が発生しないため、ICS以前のデバイスでのみビットマップフィルターをオフにしました。以下は私が使用したコードです(ネットワークにロードされたビットマップをImageViewに設定します)。

BitmapDrawable bitmapDrawable = new BitmapDrawable(imageView.getContext().getResources(), bitmap);
bitmapDrawable.setFilterBitmap(false);
imageView.setImageDrawable(bitmapDrawable);
于 2013-08-30T11:36:33.720 に答える
0

Stackoverflowですべてのソリューションを使用した後。から他の多くのソリューションへの変更android:srcから。app:srcCompact私を助けてくれたのは、私の画像がdrawable-anydpiの中にあり、画像をdrawable-anydpiからdrawableに移動して、2時間の調査の後でうまくいったことです。

PS:それは誰かにも役立つかもしれないので、私はそれをここに置きました。:)

于 2020-03-28T11:11:51.243 に答える
-1

画像の色(F8FCF8のようです)を使用して、FrameLayoutまたはImageViewの背景を定義することもできます。

android:background = "#F8FCF8"

于 2012-05-07T16:19:41.420 に答える
-1

画像の中央には画像しかないため、次のように設定することをお勧めします。

android:scaleType="centerCrop"

写真の一部を左右にトリミングしますが、画面全体を使用します...

于 2012-05-07T16:16:17.193 に答える