Android KitKat(Nexus 7))で透明度のある画像を表示するときに問題があります。それは、nexus 4(KitKat)および他の以前のAndroid OS、ここでは問題ありません)画像:
およびImageViewレイアウト:
<ImageView
Android:id="@+id/avatar"
Android:layout_width="35dp"
Android:layout_height="35dp"
Android:layout_gravity="center_vertical"
Android:layout_marginLeft="21dp"
Android:padding="3dp"
Android:src="@drawable/icon_button_profile_new"
Android:tag="@string/avatar" />
そして、Nexus 7(Android 4.4)で実行したときのスクリーンショット
また、私はURLからの画像のダウンロードとキャッシュにピカソを使用しています。
いくつかの試行の後:最初に画像をリソースドローアブルとして使用してみますが、それでも起こります(画像の透明な部分が黒くなります)、次に画像をpng画像に変換し、それが機能するため、問題はファイルの種類(gif )。私の実際のアプリではサーバーから取得した画像であり、いつものように画像をpng形式で要求することはできないため、このリンクからのソリューションを使用します: Transparent GIF in Android ImageView
私のピカソを使用しているので、1つの画像のみを表示するのは簡単です(私の質問のように)。ターゲットを使用して、次のように画像アバターから黒色を消去します。
target = new Target() {
@Override
public void onPrepareLoad(Drawable arg0) {
}
@Override
public void onBitmapLoaded(Bitmap bitmap, LoadedFrom arg1) {
if (Build.VERSION.SDK_INT == 19/*Build.VERSION_CODES.KitKat*/){
Bitmap editedavatar = AndroidUtils.eraseColor(bitmap, -16777216);
avatar.setImageBitmap(editedavatar);
}
}
@Override
public void onBitmapFailed(Drawable arg0) {
avatar.setImageResource(R.drawable.ic_profile_default);
消去色は静的メソッドの場合
public static Bitmap eraseColor(Bitmap src, int color) {
int width = src.getWidth();
int height = src.getHeight();
Bitmap b = src.copy(Config.ARGB_8888, true);
b.setHasAlpha(true);
int[] pixels = new int[width * height];
src.getPixels(pixels, 0, width, 0, 0, width, height);
for (int i = 0; i < width * height; i++) {
if (pixels[i] == color) {
pixels[i] = 0;
}
}
b.setPixels(pixels, 0, width, 0, 0, width, height);
return b;
}
しかし、私はリストビューに画像を表示するためにピカソを使用しているため、ViewHolderで Target をインプリメントし、これまでのところ非常にうまく機能しています。
Try this
<ImageView
Android:id="@+id/avatar"
Android:layout_width="35dp"
Android:layout_height="35dp"
Android:layout_gravity="center_vertical"
Android:layout_marginLeft="21dp"
Android:padding="3dp"
Android:src="@drawable/icon_button_profile_new"
Android:background="#00000000"
Android:tag="@string/avatar" />