0

Я пытаюсь реализовать простой ClipDrawable с помощью Android Jellybean (SDK 18). Я не понимаю, почему я получаю ошибку литья для ImageView.getDrawable(), когда это возвращает вытяжку, не BitmapDrawableAndroid: не может использовать BitmapDrawable для ClipDrawable

Вот мой соответствующий код в OnCreate() о деятельности:

ImageView image = (ImageView) findViewById(R.id.guage_one); 
    ClipDrawable drawable = (ClipDrawable) image.getDrawable(); 
    drawable.setLevel(10000); 

Почему я должен получить ClassCastException для этого? Я знаю, что BitmapDrawable и ClipDrawable являются подклассами Drawable, поэтому вы не можете передавать их друг другу, я это знаю. Но почему image.getDrawable() возвращает BitmapDrawable, а не только drawable? Я что-то пропустил в документации?

+1

Может быть, глупый вопрос, почему бы не использовать image.getDrawable для комбинирования конструктора для ClipDrawable? –

+1

Этот ответ может помочь: http://stackoverflow.com/questions/4862960/explicit-casting-from-super-class-to-subclass –

ответ

1

ClipDrawable не наследует BitmapDrawable.

Это это дерево наследования:

java.lang.Object

↳ android.graphics.drawable.Drawable

↳ android.graphics.drawable.DrawableWrapper

↳ андроид. graphics.drawable.ClipDrawable

Для преобразования BitmapDrawable в ClipDrawable вы можете сделать следующее:

ImageView image = (ImageView) findViewById(R.id.guage_one); 
ClipDrawable clipDrawable = new ClipDrawable(image.getDrawable(), Gravity.LEFT, ClipDrawable.HORIZONTAL); 
+0

Ah ok Я вижу, что пытаюсь сделать из суперкласса в подкласс. Поэтому мой вопрос по-прежнему заключается в том, почему image.getDrawable() возвращает BitmapDrawable, когда в документации говорится, что возвращает Drawable? Или я ожидаю большей детализации из документации, так как BitmapDrawable является Drawable? –

+0

Причина, по которой вы получаете это, заключается в том, что ресурс, который был установлен в ImageView, является изображением и был преобразован ОС в BitmapDrawable (если вы выбрали другой ресурс, вы могли бы получить другой тип Drawable из вашего ImageView, например ColorDrawable, если идентификатор ресурса указывал на цвет). –

+0

Ах, ладно, спасибо! –

Смежные вопросы