web-dev-qa-db-ja.com

setImageDrawableを動的に使用してImageViewに画像を設定する

drawableフォルダーに同じ名前のimageを持つ文字列をデータベースから動的に生成しています。

setImageDrawable(R.id.StringGenerated)を動的に使ってImageViewにその値を設定したいと思います。

助言がありますか..

108
Arun

これを試して、

int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);

これはあなたがアクセスしたいドロウアブルのIDを返すでしょう…そして、あなたは以下をすることによってimageviewでimageを設定することができます

imageview.setImageResource(id);
177
King RV
Drawable image = ImageOperations(context,ed.toString(),"image.jpg");
            ImageView imgView = new ImageView(context);
            imgView = (ImageView)findViewById(R.id.image1);
            imgView.setImageDrawable(image);

または

setImageDrawable(getResources().getDrawable(R.drawable.icon));
91

私は個人的にはこのようなメソッドsetImageResource()を使うことを好みます。

ImageView myImageView = (ImageView)findViewById(R.id.myImage);
myImageView.setImageResource(R.drawable.icon);
68
jlopez

リソースの描画可能な名前は文字列として格納されないため、ビルド中に生成された整数定数に文字列を解決する必要があります。 Resourcesクラスを使用すると、文字列をその整数に解決できます。

Resources res = getResources();
int resourceId = res.getIdentifier(
   generatedString, "drawable", getPackageName() );
imageView.setImageResource( resourceId );

これはあなたの生成された文字列をImageViewが正しい画像をロードするために使用できる整数に解決します。

あるいは、idを使用してDrawableを手動でロードしてから、リソースIDの代わりにそのドロアブルを使用してイメージを設定することもできます。

Drawable drawable = res.getDrawable( resourceId );
imageView.setImageDrawable( drawable );
24
Greyson

この答えと同じくらい簡単:

Drawable myDrawable = getResources().getDrawable(R.drawable.pic);
imageview.setImageDrawable(myDrawable);
13
Ahmad Arslan

これは、少なくともAndroid API 15では機能します。

ImageView = imgv;
Resources res = getResources(); // need this to fetch the drawable
Drawable draw = res.getDrawable( R.drawable.image_name_in_drawable );
imgv.setImageDrawable(draw);

SetImageResource()を使用することもできますが、ドキュメントでは "ビットマップの読み取りとデコードがUIスレッドで行われるため、待ち時間が発生する可能性があります。setImageDrawable()またはsetImageBitmap()の使用を検討してください。 msgstr "chettoによると

8
TiagoRL

投稿されたすべての回答が今日は当てはまりません。たとえば、getDrawable()は推奨されていません。これが更新された答えです。

ContextCompat.getDrawable(mContext, drawable)

文書化された方法から

public static final Android.graphics.drawable.Drawable getDrawable(@NotNull Android.content.Contextコンテキスト、
@ Android.support.annotation.DrawableRes int id

4

ActivityではないクラスでこのようなResourcesオブジェクトを取得できない場合は、getResources()にgetContext()メソッドを追加する必要があります。

ImageView image = (ImageView) v.findViewById(R.id.item_image);
int id = getContext().getResources().getIdentifier(imageName, "drawable", getContext().getPackageName());
image.setImageResource(id);
3

あなたはこのコードを使うことを試みることができます:

ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);
2
Mersad Nilchy

次のようなものも使えます。

imageView.setImageDrawable(ActivityCompat.getDrawable(getContext(), R.drawable.generatedID));

またはピカソを使用して:

Picasso.with(getContext()).load(R.drawable.generatedId).into(imageView);

2
ninjahoahong

imageView.setImageDrawable(getResources().getDrawable(R.drawable.my_drawable));

2
lxknvlk

私はあなたと同じ問題を抱えていました、そして私はそれを解決するために以下をしました:

**IMAGEVIEW**.setImageResource(getActivity()
             .getResources()
             .getIdentifier("**IMG**", "drawable", getActivity()
             .getPackageName()));
0
JCDecary

POJO.Javaクラスを構築し、「コンストラクタ、取得メソッド、設定メソッド」を作成します。

class POJO{
        public POJO(Drawable proImagePath) {
                setProductImagePath(proImagePath);
        }

        public Drawable getProductImagePath() {
                return productImagePath;
        }

        public void setProductImagePath(Drawable productImagePath) {
                this.productImagePath = productImagePath;
        }
}

次に、CustomAdapter.Javaに画像描画可能なリソースを介してアダプタを設定します。

    class CustomAdapter extends ArrayAdapter<POJO>{

       private ArrayList<POJO> cartList = new ArrayList<POJO>();
       public MyCartAdapter(Context context, int resource) {
          super(context, resource);
       }

       public MyCartAdapter(Context context, ArrayList<POJO> cartList) {
          super(context, 0, cartList);
          this.context = context;
          this.cartList = cartList;

       }

       @Override
       public View getView(int position, View convertView, ViewGroup parent) {
          /*
          *Here you can setup your layout and references.
          **/
          ImageView productImage = (ImageView) rootView.findViewById(R.id.cart_pro_image);
          productImage.setImageDrawable(POJO.getProductImagePath());
        }
    }

次に、ActivityClass.Javaを介して参照を渡します。

public class MyCartActivity extends AppCompatActivity{
       POJO pojo;
       CustomAdapter customAdapter;
       ArrayList<POJO> cartList = new ArrayList<POJO>();

       @Override
       protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.your_layout);

          customAdapter = new CustomAdapter(this, cartList);

          pojo = new POJO(getResources().getDrawable(R.drawable.help_green));

    }
}
0
Abdul Gaffar