Herhangi bir Drawable'ın basıldığında / odaklandığında / seçildiğinde / vb . Vurgulanmasını sağlayan genel bir çerçeve işlevi yapmaya çalışıyorum .
Benim fonksiyonum bir Drawable alır ve bir StateListDrawable döndürür, burada varsayılan durum Drawable'ın kendisidir ve durum android.R.attr.state_pressed
, yalnızca bir filtre kullanılarak uygulanarak aynı çekilebilirdir setColorFilter
.
Benim sorunum, çekilebilir dosyayı klonlayamıyorum ve filtre uygulandığında bunun ayrı bir örneğini yapamıyorum. İşte başarmaya çalıştığım şey:
StateListDrawable makeHighlightable(Drawable drawable)
{
StateListDrawable res = new StateListDrawable();
Drawable clone = drawable.clone(); // how do I do this??
clone.setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
res.addState(new int[] {android.R.attr.state_pressed}, clone);
res.addState(new int[] { }, drawable);
return res;
}
Klonlamazsam, filtre açıkça her iki duruma da uygulanır. Oynamayı denedim mutate()
ama yardımcı olmadı ..
Herhangi bir fikir?
Güncelleme:
Kabul edilen cevap gerçekten de bir çekilebilirliği klonluyor. Yine de bana yardımcı olmadı çünkü genel işlevim farklı bir problemde başarısız oldu. Görünüşe göre bir StateList'e bir çekilebilir öğe eklediğinizde, tüm filtrelerini kaybediyor.