Generuję dynamicznie ciąg z bazy danych, który ma taką samą nazwę obrazu w drawable
folderze.
Teraz chcę ustawić tę wartość do ImageView
użycia setImageDrawable(R.id.StringGenerated)
dynamicznego.
Jakieś sugestie..
Generuję dynamicznie ciąg z bazy danych, który ma taką samą nazwę obrazu w drawable
folderze.
Teraz chcę ustawić tę wartość do ImageView
użycia setImageDrawable(R.id.StringGenerated)
dynamicznego.
Jakieś sugestie..
Odpowiedzi:
Spróbuj tego,
int id = getResources().getIdentifier("yourpackagename:drawable/" + StringGenerated, null, null);
To zwróci identyfikator elementu do rysowania, do którego chcesz uzyskać dostęp ... następnie możesz ustawić obraz w widoku obrazu, wykonując następujące czynności
imageview.setImageResource(id);
Drawable image = ImageOperations(context,ed.toString(),"image.jpg");
ImageView imgView = new ImageView(context);
imgView = (ImageView)findViewById(R.id.image1);
imgView.setImageDrawable(image);
lub
setImageDrawable(getResources().getDrawable(R.drawable.icon));
Osobiście wolę stosować taką metodę setImageResource()
.
ImageView myImageView = (ImageView)findViewById(R.id.myImage);
myImageView.setImageResource(R.drawable.icon);
Nazwy zasobów, które można rysować, nie są przechowywane jako ciągi, więc trzeba będzie przekształcić ciąg na stałą całkowitą wygenerowaną podczas kompilacji. Możesz użyć Resources
klasy, aby zamienić ciąg na tę liczbę całkowitą.
Resources res = getResources();
int resourceId = res.getIdentifier(
generatedString, "drawable", getPackageName() );
imageView.setImageResource( resourceId );
Spowoduje to przekształcenie wygenerowanego ciągu na liczbę całkowitą, którą ImageView
może użyć do załadowania odpowiedniego obrazu.
Alternatywnie możesz użyć identyfikatora, aby załadować Drawable
ręcznie, a następnie ustawić obraz przy użyciu tego elementu do rysowania zamiast identyfikatora zasobu.
Drawable drawable = res.getDrawable( resourceId );
imageView.setImageDrawable( drawable );
Tak prosta jak ta odpowiedź:
Drawable myDrawable = getResources().getDrawable(R.drawable.pic);
imageview.setImageDrawable(myDrawable);
Działa to przynajmniej w 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);
Można użyć metody setImageResource (), ale dokumentacja określa, że „czy bitmapa odczytuje i dekoduje w wątku interfejsu użytkownika, co może powodować problemy z opóźnieniem… rozważ użycie metody setImageDrawable () lub setImageBitmap ()”. jak stwierdził chetto
Wszystkie opublikowane odpowiedzi nie mają zastosowania dzisiaj. Na przykład metoda getDrawable () jest przestarzała. Oto zaktualizowana odpowiedź, zdrowie!
ContextCompat.getDrawable(mContext, drawable)
Z udokumentowanej metody
public static final android.graphics.drawable.Drawable getDrawable (@NotNull android.content.Context context,
@ android.support.annotation.DrawableRes int id
Możesz spróbować użyć tego kodu:
ImageView ImgView = (ImageView)findViewById(R.id.ImgView);
ImgView.setImageResource(R.drawable.myicon);
Jeśli nie możesz uzyskać takiego obiektu Resources w klasie, która nie jest działaniem, musisz na przykład dodać metodę getContext () do metody getResources ()
ImageView image = (ImageView) v.findViewById(R.id.item_image);
int id = getContext().getResources().getIdentifier(imageName, "drawable", getContext().getPackageName());
image.setImageResource(id);
Możesz też użyć czegoś takiego:
imageView.setImageDrawable(ActivityCompat.getDrawable(getContext(),
R.drawable.generatedID));
lub używając Picassa:
Picasso.with(getContext()).load(R.drawable.generatedId).into(imageView);
Skonstruuj klasę POJO.java i utwórz „metody konstruktora, pobierającego i ustawiającego”
class POJO{
public POJO(Drawable proImagePath) {
setProductImagePath(proImagePath);
}
public Drawable getProductImagePath() {
return productImagePath;
}
public void setProductImagePath(Drawable productImagePath) {
this.productImagePath = productImagePath;
}
}
Następnie skonfiguruj adaptery za pomocą zasobów graficznych do rysowania w pliku 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());
}
}
Następnie przekaż odwołania za pośrednictwem 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));
}
}
kawałek mojego projektu, wszystko działa! )
@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());
Pliku „R” nie można wygenerować w czasie wykonywania aplikacji. Możesz użyć innych alternatyw, takich jak użycie if-else
lubswitch-case
R
ponownie