web-dev-qa-db-ja.com

ImageViewを変更するためにソースを取得する方法は?

ImageViewリソースの変更は、myImageView.setImageResource(mynewImageDrawable)を使用するだけでは大したことではないことを私は知っています。

しかし、私がやりたいのは、変更する前に現在のImageSourceを確認することです。

基本的に、imageViewsを使用して独自のグループラジオボタンを実装したいと思います。したがって、imageViewがクリックされるたびに、onclikedイベントメソッドは私のグループの画像リソースを変更します。

英語が下手でごめんなさい。

よろしく、redsea

17
Red Sea

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);
29
Juan Cortés

実際に試してみたところ、タグプロパティを必要とせずにimageViewのソースを取得する方法があることがわかりました。

Integer src = attrs.getAttributeResourceValue(
                    "http://schemas.Android.com/apk/res/Android", "src", -1);

最初のパラメータはAndroidの名前空間であり、srcはプロパティ名です。このメソッドは、見つかった場合は画像リソースIDを返します。そうでない場合は、-1を返します。

1
Andrew Carl

リソースIDをチェックして、ラジオボタンが選択されているかどうかを判断するつもりですか?これはおそらくうまくいくかもしれませんが、あまり良いデザインではありません。一般的に言えば、モデルをビューから分離する必要があります(別名、 Model-View-Controller パラダイム)。これを行うには、ラジオボタングループで選択したアイテムのインデックスを維持し、各アイテムをリストに保存することができます。アイテムを選択すると、そのインデックスを決定し、グループのモデルを更新してから、その変更を反映するようにUIを更新できます。

あなたが提案しているものが機能しないというわけではありません。それは単に良い設計ではなく、保守性の低下につながります(リソース名が変更された場合など)。 。

1
mtmurdock

srcドローアブルを取得したい場合は、次のImageViewの方法を使用してください: http://developer.Android.com/reference/Android/widget/ImageView.html#getDrawable ()

1
Mickey Tin

私は同じ問題を抱えていました、そしてここに私の実用的な解決策があります:

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);
    }

}
0
Abigail La'Fay

これを使用できます。

 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"));
0