21

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

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

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

私の下手な英語で申し訳ありません。

よろしく、レッドシー

4

7 に答える 7

32

関数がないので、ドローアブルを変更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);
于 2012-05-23T19:27:39.403 に答える
1

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

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

于 2012-05-23T19:41:21.700 に答える
1

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

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

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

于 2014-10-13T12:20:02.217 に答える
1

srcドローアブルを取得する場合は、次のメソッドを使用しますImageView: http://developer.android.com/reference/android/widget/ImageView.html#getDrawable()

于 2014-10-29T14:27:03.800 に答える
0

これを使用できます。

 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"));
于 2017-01-27T14:24:02.293 に答える
0

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

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

}
于 2019-06-05T12:34:43.717 に答える