我正在使用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包中。

08-18 16:55