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