ViewFlipper控件
<LinearLayout android:layout_height="match_parent" android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical">
<ViewFlipper
android:id="@+id/viewFlipper"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!--第一页-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:text="第一页"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<!--第二页-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/teal_200">
<TextView
android:text="第二页"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</ViewFlipper>
<LinearLayout>
onTouchEvent 方法是触屏事件, 会不断触发ACTION_MOVE移动事件
ACTION_MOVE 移动事件
ACTION_DOWN 事件返回true就意味着接下来会触发MOVE、UP 事件都将在此View中处理。
ACTION_UP 按下抬起事件
event.getX(); 获取按下的位置X轴坐标
event.getY() 获取按下的位置Y轴坐标
viewFlipper.showNext ViewFlipper显示控件的下一页
viewFlipper.showPrevious ViewFlipper显示控件的前一页
viewFlipper.setInAnimation(in_lefttoright); 进来时的动画
viewFlipper.setOutAnimation(out_lefttoright); 出去时的动画
package com.example.animation;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ViewFlipper;
public class MainActivity extends AppCompatActivity {
private ViewFlipper viewFlipper;
private float startX;
private Animation in_lefttoright;
private Animation out_lefttoright;
private Animation in_righttoleft;
private Animation out_righttoleft;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewFlipper=findViewById(R.id.viewFlipper);
//定义动画对象
in_lefttoright= AnimationUtils.loadAnimation(this,R.anim.in_lefttoright);
out_lefttoright= AnimationUtils.loadAnimation(this,R.anim.out_lefttoright);
in_righttoleft=AnimationUtils.loadAnimation(this,R.anim.in_righttoleft);
out_righttoleft=AnimationUtils.loadAnimation(this,R.anim.out_righttoleft);
}
//触屏事件
@Override
public boolean onTouchEvent(MotionEvent event) {
//ACTION_DOWN屏幕的按下事件
if(event.getAction()==MotionEvent.ACTION_DOWN){
//记录按下开始的位置X轴坐标
startX= event.getX();
//ACTION_UP按下离开的事件
}else if(event.getAction()==MotionEvent.ACTION_UP){
//记录按下结束位置X轴坐标
float endX=event.getX();
if(endX>startX){
//showNext控件的下一页
viewFlipper.setInAnimation(in_lefttoright);//进来时的动画
viewFlipper.setOutAnimation(out_lefttoright);//出去时的动画
viewFlipper.showNext();
}else if(endX<startX){
//showPrevious显示前一页
viewFlipper.setInAnimation(in_righttoleft);//进来时的动画
viewFlipper.setOutAnimation(out_righttoleft);//出去时的动画
viewFlipper.showPrevious();
}
return true;
}
return super.onTouchEvent(event);
}
}
动画xml文件:
进来动画,从右到左
in_righttoleft
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="100%p"
android:toXDelta="0"
android:duration="3000"/>
</set>
出去动画,从右到左
out_rightoleft
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0"
android:toXDelta="-100%p"
android:duration="3000"/>
</set>
出去动画,从左到右
out_lefttorigh
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="0"
android:toXDelta="100%p"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="3000"/>
</set>
进来动画,从左到右
in_lefttorigh
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
android:fromXDelta="-100%p"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="3000"/>
</set>