AdapterViewFlipper

1 描述

      AdapterViewFlipper 继承了AdapterViewAnimator,它会显示Adapter提供的多个View组件,但每次只能显示一个View,可以通过showNext、showPrevious显示下一个、上一个组件,也可以调用startFlipping自动播放View。

2 XML属性:

android:animateFirstView:设置显示该组件的第一个View时是否使用动画

android:inAnimation:设置组件显示时使用的动画

android:loopViews:设置循环到最后一个组件后是否自动“转头”到第一个组件

android:outAnimation:设置组件隐藏时使用的动画

android:autoStart:设置显示该组件是否是自动播放

android:flipInterval:设置自动播放的时间间隔

3 常用方法:

//设置动画自动播放的时间间隔
setFlipInterval(1000);
//设置显示第一个View时是否使用动画
 setAnimateFirstView(true);
  //设置适配器
setAdapter(adapter);
setInAnimation(Context context, int resourceID);//设置图片进入动画
setOutAnimation(Context context, int resourceID);//设置图片出来动画
showNext();//显示下一个view
showPrevious();//显示下一个view
stopFlipping();//停止自动播放
startFlipping();//开始自动播放

4  使用示例

xml布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    
    <AdapterViewFlipper
        android:id="@+id/av_flipper"
        android:layout_width="match_parent"
        android:loopViews="true"
        android:layout_weight="1"
        android:layout_height="wrap_content">
    AdapterViewFlipper>
    <LinearLayout
        android:layout_width="match_parent"
        android:gravity="center"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:orientation="horizontal">
        <Button
            android:text="下一个"
            android:onClick="next"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <Button
            android:text="上一个"
            android:onClick="previous"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <Button
            android:text="自动播放"
            android:onClick="auto"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    LinearLayout>
LinearLayout>
自定义动画xml文件:
anim_left_enter.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">
objectAnimator>
anim_left_exit.xml:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/accelerate_decelerate_interpolator">
    <objectAnimator
        android:propertyName="x"
        android:valueType="floatType"
        android:valueFrom="0"
        android:valueTo="1500"
        android:duration="600"/>
objectAnimator>
anim_right_enter.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">
objectAnimator>
anim_right_exit.xml:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/accelerate_decelerate_interpolator">
    <objectAnimator
        android:propertyName="x"
        android:valueType="floatType"
        android:valueFrom="0"
        android:valueTo="-1500"
        android:duration="600"/>
objectAnimator>
Activity中实现:
public class ActivityFliperActivity extends Activity  {
    private AdapterViewFlipper avFlipper;
    //图片资源
    public int[] imgIds = {R.mipmap.pic_1,R.mipmap.pic_2,R.mipmap.pic_3,R.mipmap.pic_4,R.mipmap.pic_5};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fliper);
        FliperAdapter adapter  = new FliperAdapter(this,imgIds);
        avFlipper = (AdapterViewFlipper) findViewById(R.id.av_flipper);
        //设置动画自动播放的时间间隔
        avFlipper.setFlipInterval(1000);
        //设置显示第一个View时是否使用动画
        avFlipper.setAnimateFirstView(true);
       //设置适配器
        avFlipper.setAdapter(adapter);
//        ObjectAnimator  objectAnimator = ObjectAnimator.ofFloat(avFlipper,"x",0f,1f);
//        ObjectAnimator  objectAnimator2 = ObjectAnimator.ofFloat(avFlipper,"x",1f,0f);

    }

    /**
     * 下一个
     * @param view
     */
    public void next(View view){
        //左进左出
        avFlipper.setInAnimation(this , R.animator.anim_left_enter);//设置图片进入动画
        avFlipper.setOutAnimation(this , R.animator.anim_left_exit);//设置图片出来动画
        avFlipper.showNext();//显示下一个view
        avFlipper.stopFlipping();//停止自动播放
    }

    /**
     * 上一个
     * @param view
     */
    public void previous(View view){
        //右进右出
        avFlipper.setInAnimation(this , R.animator.anim_right_enter);
        avFlipper.setOutAnimation(this , R.animator.anim_right_exit);
        avFlipper.showPrevious();//显示下一个view
        avFlipper.stopFlipping();//停止自动播放
    }

    /**
     * 自动播放
     * @param view
     */
    public void auto(View view){
        avFlipper.startFlipping();//开始自动播放
    }

}

5 动画异常处理

(1)异常描述:Caused by: java.lang.ClassCastException: android.animation.AnimatorSet cannot be cast to android.animation.ObjectAnimator
解决方案:
把自定义动画的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">
objectAnimator>
或者:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:anim/accelerate_decelerate_interpolator">
    <objectAnimator
        android:propertyName="x"
        android:valueType="floatType"
        android:valueFrom="0"
        android:valueTo="-1500"
        android:duration="600"/>
objectAnimator>
     然后重启Android studio才有效(修改之后,我通过clear 、rebuild项目都没有效果,结果重启一下才有效果,很是崩溃!)。也可以参见下面这个链接:
https://stackoverflow.com/questions/26191956/dont-understand-how-to-use-animation-with-adapterviewflipper

6 效果图



源码: 点击打开链接

你可能感兴趣的:(Android基础)