资源myResources = getResources();
CharSequence styledText = myResources.getText(R.string.stop_message); Drawable icon = myResources.getDrawable(R.drawable.app_icon);
int opaqueBlue = myResources.getColor(R.color.opaque_blue);
float borderWidth = myResources.getDemension(R.dimen.standard_border);
动画tranout = AnimationUtils.loadAnimation(this,R.anim.spin_shrink_fade);
String {} stringArray = myResources.getStringArray(R.array.string_array);
int [] intArray = myResources.getIntArray(R.array.integer_array);
资源myResources = getResources(); AnimationDrawable rocket =(AnimationDrawable)myResources.getDrawable(R.drawable.frame_by_frame);
我将最后几个陈述与前一个陈述进行比较。我的问题是为什么在上面的其他例子中显式转换AnimationDrawable时不需要强制转换?
答案 0 :(得分:1)
因为AnimationDrawable
延伸Drawable
(间接)。
myResources.getDrawable
会返回Drawable
类型,必须投放该类型才能将其分配给AnimationDrawable
类型。
基本上AnimationDrawable
是Drawable
的一种类型,这意味着Drawable
个变量可以指向Drawable
类型及其子类型(包括AnimationDrawable
) 。这不起作用,例如,您不能将Drawable
类型分配给指向AnimationDrawable的变量,就像您无法将Drawable
类型分配给a LevelListDrawable
一样变量指向Drawable
(另一种{{1}})。
有关详细信息,请参阅此页面: http://developer.android.com/reference/android/graphics/drawable/DrawableContainer.html
此页面提供更多一般信息: http://www.javabeginner.com/learn-java/java-inheritance
答案 1 :(得分:0)
因为有很多类型的抽奖,取决于你要求你得到不同类型,所有都继承自通用drawable祖先。除非您只关心通用的Drawable方法和成员,否则您必须知道您要求的类型并将通用Drawable转换为该特定类型。