0

Android Jellybean (SDK 18)을 사용하여 간단한 ClipDrawable을 구현하려고합니다. 내가 ImageView.getDrawable (위해 주조 오류를 받고 있어요 내가 왜) 이해하지 못하는 그 활동의 드로어 블,하지 OnCreate 아닌 BitmapDrawableAndroid : BitmapDrawable을 ClipDrawable에 캐스팅 할 수 없습니다.

여기 내 관련 코드() 반환 할 때 :

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

왜이 경우 ClassCastException이 발생합니까? BitmapDrawable 및 ClipDrawable은 Drawable의 하위 클래스이므로 서로를 캐스팅 할 수 없다는 것을 알고 있습니다. 그러나 image.getDrawable()이 drawable이 아닌 BitmapDrawable을 반환하는 이유는 무엇입니까? 문서에서 뭔가 빠졌습니까?

+1

어쩌면 바보 같은 질문입니다. image.getDrawable을 사용하여 ClipDrawable의 생성자에 피드를 사용하지 않으시겠습니까? –

+1

이 대답은 도움이 될 수 있습니다 : http://suackoverflow.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

아, 알았어. 내가 슈퍼 클래스에서 서브 클래스로 캐스팅하려고하는 중이다. 그래서 내 질문은 여전히 ​​Image.getDrawable() BitmapDrawable 문서를 반환 할 Drawable 반환 할 때 반환 무엇입니까? 또는 BitmapDrawable이 Drawable이기 때문에 문서에서 많은 세분성을 기대합니까? –

+0

ImageView에서 설정된 리소스가 이미지이고 BitmapDrawable로 OS에 의해 변환 된 것입니다 (다른 리소스를 선택한 경우 ImageView에서 다른 유형의 Drawable을 받았을 수 있습니다. 예를 들어 자원 ID가 색상을 가리키는 경우 ColorDrawable). –

+0

아, 고마워! –