ViewFlipper Demo效果如下:
ViewFlipperDemo.gif
ViewFlipper介紹
ViewFlipper是一個常用用于多視圖切換的控件,繼承于ViewAnimator類。易實現(xiàn)不同動畫的切換效果本涕。
常用方法
showNext :顯示在ViewFlipper中當(dāng)前顯示視圖的下一個視圖业汰。
showPrevious :顯示在ViewFlipper中當(dāng)前顯示視圖的上一個視圖。
setFilpInterval :用于設(shè)置視圖切換的間隔時間菩颖,參數(shù)為毫秒样漆。
startFlipping :開始切換,會一直循環(huán)晦闰。
stopFlipping :停止切換放祟。
setAutoStart :參數(shù)設(shè)為true時自動開始切換,為true等同于調(diào)用startFlipping 呻右。
isFlipping :是否正在切換跪妥。
isAutoStart :是否自動開始。
實現(xiàn)
一声滥、在布局中添加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目錄下創(chuàng)建兩個xml動畫,根據(jù)自己需求實現(xiàn)動畫效果落塑。一個是視圖進入動畫纽疟,一個是視圖退出動畫。分別設(shè)置為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>
三、創(chuàng)建子視圖用于添加在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);
五膘壶、點擊實現(xiàn)數(shù)字的遞增動畫效果
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;
}
}
}
完整實現(xiàn)代碼
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;//是否為第一個視圖,用于判斷調(diào)用上或下一個視圖
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>