最近想用一下VectorDrawable, 看到一个列子里有这段代码。
Drawable drawable = mCpuAniImageView.getDrawable();
if (drawable instanceof Animatable) {
((Animatable) drawable).start();
}
这个Animatable当然是一个接口,原来强制类型转换还能转成接口。那么,强制类型转换转成接口是什么意思?
复习了一下强制类型转换: 点击打开链接
显然,这里(Animatable) drawable不是向上转型,因为Drawable的父类是Object,没有start()方法。那么,这里就应该是向下转型,转成Drawable的子类,同时这个子类实现了Animatable接口。
如果想看看这里到底转成哪个实现类,不妨加个log。
Log.i("DrawableClass:","class_name:"+drawable.getClass().getName());
Drawable drawable = mCpuAniImageView.getDrawable();
if (drawable instanceof Animatable) {
((Animatable) drawable).start();
}
这个Animatable当然是一个接口,原来强制类型转换还能转成接口。那么,强制类型转换转成接口是什么意思?
复习了一下强制类型转换: 点击打开链接
- 向上转型:转成父类,这是肯定可以转的,并且在JAVA中是自动的,无需使用任何语句。
- 向下转型:转成子类,这个需要手动转换,而且有可能转换失败,抛出异常。
显然,这里(Animatable) drawable不是向上转型,因为Drawable的父类是Object,没有start()方法。那么,这里就应该是向下转型,转成Drawable的子类,同时这个子类实现了Animatable接口。
如果想看看这里到底转成哪个实现类,不妨加个log。
Log.i("DrawableClass:","class_name:"+drawable.getClass().getName());
我们可以看到是这个类 android.support.graphics.drawable.AnimatedVectorDrawableCompat 果然,它是Drawable的子类,同时实现了Animatable接口。