不懂如何使用adapterViewFlipper动画

时间:2014-10-04 10:35:32

标签: android

我不明白如何使用adapterViewflipper动画。 我在API13中,我在Fragment中使用了一个adapterViewFlipper。

所以在My 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;
}

我使用按钮浏览图像,我尝试设置动画。似乎sitePicturesFlipper.setInAnimation(Context context,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.animation.ObjectAnimator

所以我不明白设置和正确使用它并且很难在Internet上找到使用adapterViewFlipper的例子,除了泰语,但是我对泰语不太满意......

那么,如何使用带有adapterViewFlipper的动画?

1 个答案:

答案 0 :(得分:7)

好吧,我终于发现 ObjectAnimator 是使用 adapterViewFlipper 声明动画的最佳方法。 无论如何,它不喜欢标签&#34;&lt;&#34; set&#34;&gt;&#34;和&#34;&lt;&#34; / set&#34;&gt;&#34;至少我写的时候。而且我还没有找到如何声明几个属性动画。我承认我仍然有问题要真正理解Android文档......

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

因此,为了解决我遇到的第一个问题,在adapterViewFlipper中左右滑动图像的一整套ObjectAnimator是:

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();