studio setimageresource setimagedrawable from android android-widget

android - setimageresource - Usar setImageDrawable dinĂ¡micamente para establecer la imagen en un ImageView



setimagedrawable android (14)

Estoy generando una cadena de la base de datos dinámicamente que tiene el mismo nombre de imagen en la carpeta drawable .

Ahora quiero establecer ese valor para ImageView usando setImageDrawable(R.id.StringGenerated) dinámicamente.

Alguna sugerencia..


Construya una clase POJO.java y cree "métodos constructor, getter & setter"

class POJO{ public POJO(Drawable proImagePath) { setProductImagePath(proImagePath); } public Drawable getProductImagePath() { return productImagePath; } public void setProductImagePath(Drawable productImagePath) { this.productImagePath = productImagePath; } }

A continuación, configure los adaptadores a través de los recursos dibujables de la imagen en 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()); } }

Luego pasa las referencias a través de 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)); } }


El archivo ''R'' no se puede generar en el tiempo de ejecución de la aplicación. Puede usar otras alternativas como usar if-else o switch-case


Esto funciona, al menos en 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);

Podría usar setImageResource (), pero la documentación especifica que "la lectura y decodificación de Bitmap en el hilo de la interfaz de usuario, que puede causar un problema de latencia ... considere usar setImageDrawable () o setImageBitmap ()." según lo indicado por chetto


Los nombres dibujables del recurso no se almacenan como cadenas, por lo que deberá resolver la cadena en la constante entera generada durante la compilación. Puede usar la clase Resources para resolver la cadena en ese entero.

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

Esto resuelve la cadena generada en el entero que ImageView puede usar para cargar la imagen correcta.

Alternativamente, puede usar la identificación para cargar el Drawable manualmente y luego establecer la imagen usando ese drawable en lugar del ID del recurso.

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


Personalmente prefiero usar el método setImageResource() como este.

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


Prueba esto,

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

Esto devolverá la identificación del drawable al que desea acceder ... luego puede establecer la imagen en la vista de la imagen haciendo lo siguiente

imageview.setImageResource(id);


Si no puede obtener un objeto de Recursos como este en una clase que no es una Actividad, tiene que agregar el método getContext () para getResources () por ejemplo

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


También puedes usar algo como:

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

o usando Picasso:

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


Tan simple como esta respuesta:

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


Todas las respuestas publicadas no se aplican hoy. Por ejemplo, getDrawable () está en desuso. Aquí hay una respuesta actualizada, ¡salud!

ContextCompat.getDrawable(mContext, drawable)

Del método documentado

público estático final android.graphics.drawable.Drawable getDrawable (@NotNull android.content.Context context,
@ android.support.annotation.DrawableRes int id


Tuve el mismo problema que usted y yo hicimos lo siguiente para resolverlo:

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


btnImg.SetImageDrawable (GetDrawable (Resource.Drawable.button_round_green));

API 23 Android 6.0


una parte de mi proyecto, ¡todo funciona! )

@Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { final ModelSystemTraining modelSystemTraining = items.get(position); int icon = context.getResources().getIdentifier(String.valueOf(modelSystemTraining.getItemIcon()), "drawable", context.getPackageName()); final FragmentViewHolderSystem fragmentViewHolderSystem = (FragmentViewHolderSystem) holder; final View itemView = fragmentViewHolderSystem.itemView; // Set Icon fragmentViewHolderSystem.trainingIconImage.setImageResource(icon); // Set Title fragmentViewHolderSystem.title.setText(modelSystemTraining.getItemTitle()); // Set Desc fragmentViewHolderSystem.description.setText(modelSystemTraining.getItemDescription());


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

o

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