我正在使用AdaptorViewFlipper。
其方法setInAnimation()
和setOutAnimation()
期望XML的资源ID为ObjectAnimator
。
我想要动画缩放&同时淡化视图。
我定义了这个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
永远不会被召唤。
我做错了吗?
答案 0 :(得分:1)
来自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
。
注意 - &GT; getFrameForChild
是一种包方法,因此您的扩展AdapterViewFlipper
必须位于android.widget
包中。