ImageViewリソースの変更は、myImageView.setImageResource(mynewImageDrawable)
を使用するだけでは大したことではないことを私は知っています。
しかし、私がやりたいのは、変更する前に現在のImageSourceを確認することです。
基本的に、imageViewsを使用して独自のグループラジオボタンを実装したいと思います。したがって、imageViewがクリックされるたびに、onclikedイベントメソッドは私のグループの画像リソースを変更します。
英語が下手でごめんなさい。
よろしく、redsea
getDrawableId
関数がないため、ドローアブルを変更するときにImageView
のタグを設定するなどの操作を行う必要があります。たとえば、ドローアブルIDをImageView
のタグとして設定すると、タグからドローアブルIDを取得できます。
90%の確率で、ビューにはタグが付いていないので、最も簡単な方法は、タグが唯一のタグであると想定することです。
myImageView.setTag(R.drawable.currentImage); //When you change the drawable
int drawableId = (Integer)myImageView.getTag(); //When you fetch the drawable id
Androidビューは、一意の識別子を持っている限り、複数のタグを同時にホストできます。 一意のIDを作成 リソースを作成し、それを最初の引数としてsetTag
メソッド呼び出しに追加する必要があります。このようなコードを残す:
myImageView.setTag(R.id.myTagId, R.drawable.currentImage); //Set
int drawableId = (Integer)myImageView.getTag(R.id.myTagId);
実際に試してみたところ、タグプロパティを必要とせずにimageViewのソースを取得する方法があることがわかりました。
Integer src = attrs.getAttributeResourceValue(
"http://schemas.Android.com/apk/res/Android", "src", -1);
最初のパラメータはAndroid
の名前空間であり、src
はプロパティ名です。このメソッドは、見つかった場合は画像リソースIDを返します。そうでない場合は、-1を返します。
リソースIDをチェックして、ラジオボタンが選択されているかどうかを判断するつもりですか?これはおそらくうまくいくかもしれませんが、あまり良いデザインではありません。一般的に言えば、モデルをビューから分離する必要があります(別名、 Model-View-Controller パラダイム)。これを行うには、ラジオボタングループで選択したアイテムのインデックスを維持し、各アイテムをリストに保存することができます。アイテムを選択すると、そのインデックスを決定し、グループのモデルを更新してから、その変更を反映するようにUIを更新できます。
あなたが提案しているものが機能しないというわけではありません。それは単に良い設計ではなく、保守性の低下につながります(リソース名が変更された場合など)。 。
src
ドローアブルを取得したい場合は、次のImageView
の方法を使用してください: http://developer.Android.com/reference/Android/widget/ImageView.html#getDrawable ()
私は同じ問題を抱えていました、そしてここに私の実用的な解決策があります:
public void engLayoutExpand(View view) {
ImageView iv = (ImageView) view;
// One way:
Bitmap bm1 = ((BitmapDrawable) iv.getDrawable()).getBitmap();
Bitmap bm2 = ((BitmapDrawable) getResources().getDrawable(R.drawable.baseline_expand_less_black_36)).getBitmap();
if (bm1 == bm2) {
iv.setImageResource(R.drawable.baseline_expand_more_black_36);
}
// Other way
Drawable.ConstantState cs1 = iv.getDrawable().getConstantState();
Drawable.ConstantState cs2 = getResources().getDrawable(R.drawable.baseline_expand_less_black_36).getConstantState();
if ( cs1 == cs2) {
iv.setImageResource(R.drawable.baseline_expand_more_black_36);
}
}
これを使用できます。
private Drawable colocaImgen(String nombreFile) {
Drawable res1 = null;
String uri1 = null;
try {
//First image
uri1 = "@drawable/" + nombreFile;
int imageResource1 = getResources().getIdentifier(uri1, null,getApplicationContext().getPackageName());
res1 = getResources().getDrawable(imageResource1);
} catch (Exception e) {
// TODO Auto-generated catch block
//int imageResource1 = context.getResources().getIdentifier(uri1, null, context.getApplicationContext().getPackageName());
res1 = getResources().getDrawable(R.drawable.globo2);// Default image
}
return res1;
}
その後
((ImageView) findViewById(R.id.youNameFile)).setImageDrawable(colocaImgen("NameFile"));