我正在使用AdaptorViewFlipper。
其方法setInAnimation()
和setOutAnimation()
期望带有ObjectAnimator
的XML的资源ID。
我希望动画同时缩放和淡化视图。
我定义了这个scale_in_animator.xml
(为示例起见,我只发布了In动画,而Out只是倒数)
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:propertyName="transitionScaleIn"
android:valueFrom="0"
android:valueTo="1"
android:valueType="floatType" />
AdaptorViewFlipper
适配器返回的视图包括以下功能:public void setTransitionScaleIn(float value) {
setScaleX(2-value);
setScaleY(2-value);
setAlpha(value);
}
但是,没有任何反应。
setTransitionScaleIn
从未被调用。难道我做错了什么?
最佳答案
从AdapterViewFlipper
的源代码:
.
.
// We wrap the new view in a FrameLayout so as to respect the contract
// with the adapter, that is, that we don't modify this view directly
FrameLayout fl = getFrameForChild();
.
.
因此,
AdapterViewFlipper
将每个子视图包装在FrameLayout
内,所以我只需要扩展AdapterViewFlipper并覆盖此函数:FrameLayout getFrameForChild() {
return new FrameLayoutAnimable(getContext());
}
并且当然使用所有setXXXXX方法创建扩展
FrameLayoutAnimable
的类FrameLayout
。注意->
getFrameForChild
是一种打包方法,因此扩展的AdapterViewFlipper
必须位于android.widget
包中。