34

私はImageViewを持っています。その onClick で、Drawable を取得します。

Drawable dr = ((ImageView) v).getDrawable();

ダイアログの ImageView に設定します。

zoomedImage.setImageDrawable(dr);

しかし、ダイアログを閉じるか、アクティビティが再開されます。元の位置にある画像が引き伸ばされ、そのサイズよりも大きく表示されるため、ImageView には画像の一部しか表示されません。

これはディープ コピーのケースですか、それとも別の問題がありますか? そうである場合、元の Drawable をディープ コピーして、コピーをズーム イメージに設定するにはどうすればよいですか?

前もって感謝します。

4

4 に答える 4

83

最後に私は成功します!私は同様の問題を抱えていました.drawableでカラーフィルターを使用すると、drawableが変更されました.ここの他の人の解決策に非常に近いですが、これだけがうまくいきました:

Drawable drwNewCopy = dr.getConstantState().newDrawable().mutate();
于 2014-08-23T13:05:04.433 に答える
18

次のコードを使用して、ドローアブルをコピーできました。

drawable.mutate().getConstantState().newDrawable();

ここでmutate()は、状態の共有を避けるためにドローアブルをミュータブルにしgetConstantState().newDrawable()、新しいコピーを作成します。

したがって、異なるImageViews は異なるドローアブルを使用し、ストレッチはありません。

于 2014-02-19T13:09:14.423 に答える
1

BitmapFactoryを使用して、ドローアブルをビットマップに変換し、個別に変更を加えるか実行します。

于 2012-10-25T08:27:30.827 に答える
0

上記の解決策は私にはうまくいきませんが、うまくいきます

val myDrawable = DrawableCompat.wrap(view.background).mutate() as GradientDrawable
myDrawable.setColor(ContextCompat.getColor(view.context, R.color.White))
于 2021-01-12T12:44:25.130 に答える