不明白如何将动画与适配器视图翻转器一起使用



我不知道如何使用adapterViewflipper的动画。我在API13中,我在片段中使用适配器ViewFlipper。

所以在我的xml文件中,我只有:

        <AdapterViewFlipper
            android:id="@+id/avfPicturesSite"
            android:layout_width="match_parent"
                android:layout_height="300dp"
                android:background="@drawable/gradientbackground"
             >
        </AdapterViewFlipper>

并且我在getView()中动态创建ImageView。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = null;
    if (convertView == null) {
        final ViewHolder viewHolder = new ViewHolder();
        view = new ImageView(context);
        viewHolder.img = (ImageView) view;
        view.setTag(viewHolder);
    } else {
        view = convertView;
    }

    ViewHolder viewHolder = (ViewHolder)view.getTag();
    viewHolder.img.setImageURI(getItem(position));
    return view;
}

我用按钮浏览图像,尝试在其中设置动画。似乎站点PicturesFlipper.setInAnimation(上下文上下文,int resourceID)正在等待一个AnimatorSet。

    nextSitePicture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            //sitePicturesFlipper.setInAnimation(R.animator.right_in);
            sitePicturesFlipper.setInAnimation(getActivity(), R.anim.left_in);
            sitePicturesFlipper.setOutAnimation(getActivity(), R.anim.right_out);
            sitePicturesFlipper.showNext();
        }
    });

动画师们是这样宣布的:

left_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
     android:shareInterpolator="false" >
    <translate android:duration="5000" android:fromXDelta="-100%" android:toXDelta="0%"/>
    <alpha android:duration="5000" android:fromAlpha="0.0" android:toAlpha="1.0" />
 </set>

right_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >
    <translate android:duration="5000" android:fromXDelta="0%" android:toXDelta="100%"/>
    <alpha android:duration="5000" android:fromAlpha="1.0" android:toAlpha="0.0" />
</set>

但当我点击按钮时,我会得到一个RuntimeException未知动画师名称:translate!

我也试着使用ObjectAnimator,比如:

    nextSitePicture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            sitePicturesFlipper.setInAnimation(getActivity(), R.animator.left_in);
            sitePicturesFlipper.setInAnimation(getActivity(), R.animator.right_out);
            sitePicturesFlipper.showNext();
        }
    });

xml文件为:

left_in2.xml

<?xml version="1.0" encoding="utf-8"?>
<set>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
                android:interpolator="@android:anim/accelerate_decelerate_interpolator"
                android:propertyName="yFraction"
                android:valueType="floatType"
                android:valueFrom="-1"
                android:valueTo="0"
                android:duration="600"/>
</set>

right_out2.xml:

<?xml version="1.0" encoding="utf-8"?>
<set>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
                android:interpolator="@android:anim/accelerate_decelerate_interpolator"
                android:propertyName="yFraction"
                android:valueType="floatType"
                android:valueFrom="0"
                android:valueTo="1"
                android:duration="600"/>
</set>

但在这种情况下,我得到java.lang.ClassCastException:android.animation.AnimatorSet不能转换为android.anitation.ObjectAnimator

所以我不明白如何正确设置和使用它,在互联网上很难找到使用adapterViewFlipper的例子,除了泰语,但我对泰语不太熟悉。。。

那么,如何将动画与adapterViewFlipper一起使用呢?

好吧,我终于发现ObjectAnimator是用adapterViewFlipper声明动画的正确方法。不管怎么说,它不喜欢标签"<"set">"one_answers"<"/set">",至少在我写的时候是这样。我没有找到如何声明几个属性动画。我承认,我仍然有问题,以真正理解Android文档。。。

如果有人对此有想法,请等待信息。

因此,为了解决我遇到的第一个问题,一套完整的ObjectAnimator可以在适配器中左右滑动图像ViewFlipper是:

left_in.xml,在animator文件夹中声明

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:propertyName="x"
            android:valueType="floatType"
            android:valueFrom="-1500"
            android:valueTo="0"
            android:duration="600"/>

right_out.xml

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:propertyName="x"
            android:valueType="floatType"
            android:valueFrom="0"
            android:valueTo="1500"
            android:duration="600"/>

right_in.xml

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:propertyName="x"
            android:valueType="floatType"
            android:valueFrom="1500"
            android:valueTo="0"
            android:duration="600"/>

left_out.xml

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
            android:interpolator="@android:anim/accelerate_decelerate_interpolator"
            android:propertyName="x"
            android:valueType="floatType"
            android:valueFrom="0"
            android:valueTo="-1500"
            android:duration="600"/>

然后使用动画:

    myAdapterViewFlipper.setInAnimation(getActivity(), R.animator.right_in);
    myAdapterViewFlipper.setOutAnimation(getActivity(), R.animator.left_out);
    myAdapterViewFlipper.showNext();

    myAdapterViewFlipper.setInAnimation(getActivity(), R.animator.left_in);
    myAdapterViewFlipper.setOutAnimation(getActivity(), R.animator.right_out);
    myAdapterViewFlipper.showPrevious();

最新更新