Mam obraz res/drawable/test.png
(R.drawable.test).
Chcę przekazać ten obraz do funkcji, która akceptuje Drawable
np mButton.setCompoundDrawables()
.
Jak mogę przekonwertować zasób obrazu na Drawable
?
Mam obraz res/drawable/test.png
(R.drawable.test).
Chcę przekazać ten obraz do funkcji, która akceptuje Drawable
np mButton.setCompoundDrawables()
.
Jak mogę przekonwertować zasób obrazu na Drawable
?
Odpowiedzi:
Twoja aktywność powinna mieć metodę getResources. Robić:
Drawable myIcon = getResources().getDrawable( R.drawable.icon );
Ten kod jest przestarzały:
Drawable drawable = getResources().getDrawable( R.drawable.icon );
Zamiast tego użyj tego:
Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);
ResourcesCompat.getDrawable(getResources(), R.drawable.icon, null);
(gdzie trzeci parametr jest opcjonalnym wystąpieniem motywu).
getDrawable (int id)
Sposób jest amortyzowane API 22.
Zamiast tego należy użyć getDrawable (int id, Resources.Theme theme)
interfejsu API 21+
Kod wyglądałby mniej więcej tak.
Drawable myDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
myDrawable = context.getResources().getDrawable(id, context.getTheme());
} else {
myDrawable = context.getResources().getDrawable(id);
}
getResources().getDrawable(R.drawable.ic_warning_80dp, context?.theme)
Chciałbym tylko dodać, że jeśli otrzymujesz komunikat „przestarzały” podczas korzystania z getDrawable (...), powinieneś zamiast tego użyć następującej metody z biblioteki wsparcia.
ContextCompat.getDrawable(getContext(),R.drawable.[name])
Podczas korzystania z tej metody nie musisz używać getResources ().
Jest to równoważne z robieniem czegoś takiego
Drawable mDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
mDrawable = ContextCompat.getDrawable(getContext(),R.drawable.[name]);
} else {
mDrawable = getResources().getDrawable(R.id.[name]);
}
Działa to zarówno w wersjach Lollipop przed, jak i po.
Uzyskaj Drawable z zasobu wektorowego niezależnie od tego, czy jest to wektor, czy nie:
AppCompatResources.getDrawable(context, R.drawable.icon);
Uwaga:
ContextCompat.getDrawable(context, R.drawable.icon);
będzie produkować android.content.res.Resources$NotFoundException
dla zasobu wektorowego.
Jeśli próbujesz uzyskać rysunek z widoku, w którym ustawiony jest obraz,
ivshowing.setBackgroundResource(R.drawable.one);
wtedy drawable zwróci tylko wartość zerową z następującym kodem ...
Drawable drawable = (Drawable) ivshowing.getDrawable();
Lepiej więc ustawić obraz za pomocą następującego kodu, jeśli chcesz pobrać rysowanie z określonego widoku.
ivshowing.setImageResource(R.drawable.one);
tylko wtedy drawable zostanie przekonwertowany dokładnie.
Jeśli dziedziczysz po fragmencie, możesz:
Drawable drawable = getActivity().getDrawable(R.drawable.icon)