いくつかの試行の後:最初に画像をリソース描画可能として使用しようとしましたが、それでも発生します(画像の透明な部分が黒くなります)。次に、画像をpng画像に変換するとうまくいきます。問題はファイルタイプにあります(gif )。実際のアプリではサーバーから画像を取得し、いつものようにpng形式で画像をリクエストできないため、このリンクのソリューションを使用します: Transparent GIF in Android ImageView
Picasso を使用しているので、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;
}
しかし、リストビューに画像を表示するためにPicassoを使用しているため、ViewHolderにTargetを実装し、これまでのところ非常にうまく機能しています。