0

Android Jellybean (SDK 18) を使用して単純な ClipDrawable を実装しようとしています。BitmapDrawable ではなく Drawable を返すときに ImageView.getDrawable() のキャスト エラーが発生する理由がわかりません

アクティビティの onCreate() に関連するコードは次のとおりです。

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

これで ClassCastException が発生するのはなぜですか? BitmapDrawable と ClipDrawable は Drawable のサブクラスであることを知っているので、それらを互いにキャストすることはできません。しかし、image.getDrawable() がドローアブルだけでなく BitmapDrawable を返すのはなぜですか? ドキュメントに何か欠けていますか?

4

1 に答える 1

1

ClipDrawable は BitmapDrawable を継承しません。

これは継承ツリーです。

java.lang.Object

↳ android.graphics.drawable.Drawable

↳ android.graphics.drawable.DrawableWrapper

↳ android.graphics.drawable.ClipDrawable

BitmapDrawable を ClipDrawable に変換するには、次のようにします。

ImageView image = (ImageView) findViewById(R.id.guage_one);
ClipDrawable clipDrawable = new ClipDrawable(image.getDrawable(), Gravity.LEFT, ClipDrawable.HORIZONTAL);
于 2016-11-16T21:52:41.683 に答える