美文网首页
使用ViewFlipper实现简单的数字递增滚动效果

使用ViewFlipper实现简单的数字递增滚动效果

作者: fengfancky | 来源:发表于2019-12-17 16:54 被阅读0次

    ViewFlipper Demo效果如下:

    ViewFlipperDemo.gif

    ViewFlipper介绍

    ViewFlipper是一个常用用于多视图切换的控件,继承于ViewAnimator类。易实现不同动画的切换效果。

    常用方法
    showNext :显示在ViewFlipper中当前显示视图的下一个视图。
    showPrevious :显示在ViewFlipper中当前显示视图的上一个视图。
    setFilpInterval :用于设置视图切换的间隔时间,参数为毫秒。
    startFlipping :开始切换,会一直循环。
    stopFlipping :停止切换。
    setAutoStart :参数设为true时自动开始切换,为true等同于调用startFlipping 。
    isFlipping :是否正在切换。
    isAutoStart :是否自动开始。

    实现
    一、在布局中添加ViewFlipper

        <ViewFlipper
          android:id="@+id/viewFlipper"
          android:layout_width="200dp"
          android:layout_height="wrap_content"
          app:layout_constraintBottom_toBottomOf="parent"
          app:layout_constraintEnd_toEndOf="parent"
          app:layout_constraintStart_toStartOf="parent"
          app:layout_constraintTop_toTopOf="parent"
          android:inAnimation="@anim/anim_in"
          android:outAnimation="@anim/anim_out"/>
    

    二、在anim目录下创建两个xml动画,根据自己需求实现动画效果。一个是视图进入动画,一个是视图退出动画。分别设置为inAnimaton、outAnimation的值(见步骤一代码)。

    /anim/anim_in.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500">
          <translate android:fromYDelta="100%p"  android:toYDelta="0"/>
    </set>
    

    /anim/anim_out.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500">
          <translate android:fromYDelta="0" android:toYDelta="-100%p" />
    </set>
    

    三、创建子视图用于添加在ViewFlipper中

    /layout/flipper_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="24sp"
        android:gravity="center_horizontal"
        android:layout_gravity="center"
        android:paddingTop="10dp"
        android:paddingBottom="10dp">
    </TextView>
    

    四、添加视图到ViewFlipper

        View view = LayoutInflater.from(this).inflate(R.layout.flipper_item,null);
        textView1 = view.findViewById(R.id.text);
        View view1 = LayoutInflater.from(this).inflate(R.layout.flipper_item,null);
        textView2 = view1.findViewById(R.id.text);
        viewFlipper.addView(view);
        viewFlipper.addView(view1);
        viewFlipper.setAutoStart(false);
    

    五、点击实现数字的递增动画效果

    public void onClick(View view) {
        if (view.getId() == R.id.button){
            currentFavNum+=1;
            if(isFirst){
                textView2.setText(currentFavNum+"");
                viewFlipper.showNext();
                isFirst = false;
            }else {
                textView1.setText(currentFavNum+"");
                viewFlipper.showPrevious();
                isFirst = true;
            }
        }
    }
    

    完整实现代码

    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.ViewFlipper;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        ViewFlipper viewFlipper;
        TextView textView1,textView2;
        Button button;
        private boolean isFirst = true;//是否为第一个视图,用于判断调用上或下一个视图
        private int currentFavNum = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            viewFlipper = findViewById(R.id.viewFlipper);
            button = findViewById(R.id.button);
            button.setOnClickListener(this);
            initViewFlipper();
        }
    
        private void initViewFlipper(){
            View view = LayoutInflater.from(this).inflate(R.layout.flipper_item,null);
            textView1 = view.findViewById(R.id.text);
            textView1.setText(currentFavNum+"");//初始化值为0
            View view1 = LayoutInflater.from(this).inflate(R.layout.flipper_item,null);
            textView2 = view1.findViewById(R.id.text);
            viewFlipper.addView(view);
            viewFlipper.addView(view1);
            viewFlipper.setAutoStart(false);
        }
    
        @Override
        public void onClick(View view) {
            if (view.getId() == R.id.button){
                currentFavNum += 1;
                if(isFirst){
                    textView2.setText(currentFavNum+"");
                    viewFlipper.showNext();
                    isFirst = false;
                }else {
                    textView1.setText(currentFavNum+"");
                    viewFlipper.showPrevious();
                    isFirst = true;
                }
            }
        }
    }
    

    avtivity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <ViewFlipper
            android:id="@+id/viewFlipper"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            android:inAnimation="@anim/anim_in"
            android:outAnimation="@anim/anim_out"/>
    
        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="加"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/viewFlipper" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>
    

    相关文章

      网友评论

          本文标题:使用ViewFlipper实现简单的数字递增滚动效果

          本文链接:https://www.haomeiwen.com/subject/ygwsnctx.html