使用ViewFlipper实现简单的数字递增滚动效果
2019-12-17 本文已影响0人
fengfancky
ViewFlipper Demo效果如下:
ViewFlipperDemo.gifViewFlipper介绍
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>