Android ViewFliper实现屏幕切换
Android ViewFliper实现屏幕切换
ViewFlipper 可以包含多个View 且View之间的切换可以通过Animation来设置切换效果,如渐变。
xml布局:
ViewFlipper里面有四个页面,下面通过手势切换页面。
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical" android:layout_width="fill_parent"
- android:background="@drawable/static_bg_snowy_day"
- android:layout_height="fill_parent">
- <ViewFlipper android:id="@+id/flipper"
- android:layout_width="fill_parent" android:layout_height="fill_parent">
- <include android:id="@+id/firstlayout" layout="@layout/first"></include>
- <include android:id="@+id/secondlayout" layout="@layout/second"></include>
- <include android:id="@+id/thirdlayout" layout="@layout/third"></include>
- <include android:id="@+id/fourthlayout" layout="@layout/fourth"></include>
- </ViewFlipper>
- </LinearLayout>
- public class viewflipper extends Activity implements OnGestureListener,
- OnTouchListener {
- private ViewFlipper mFlipper;
- GestureDetector mGestureDetector;
- private int mCurrentLayoutState;
- private static final int FLING_MIN_DISTANCE = 100;
- private static final int FLING_MIN_VELOCITY = 200;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.flipper);
- mFlipper = (ViewFlipper) findViewById(R.id.flipper);
- // 注册一个用于手势识别的类
- mGestureDetector = new GestureDetector(this);
- // 给mFlipper设置一个listener
- mFlipper.setOnTouchListener(this);
- mCurrentLayoutState = 0;
- // 允许长按住ViewFlipper,这样才能识别拖动等手势
- mFlipper.setLongClickable(true);
- }
- public boolean onDown(MotionEvent e) {
- return false;
- }
- /**
- * 用户按下触摸屏、快速移动后松开即触发这个事件 e1:第1个ACTION_DOWN MotionEvent e2:最后一个ACTION_MOVE
- * MotionEvent velocityX:X轴上的移动速度,像素/秒 velocityY:Y轴上的移动速度,像素/秒 触发条件 :
- * X轴的坐标位移大于FLING_MIN_DISTANCE,且移动速度大于FLING_MIN_VELOCITY个像素/秒
- */
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
- float velocityY) {
- if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
- && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
- // 当像左侧滑动的时候
- // 设置View进入屏幕时候使用的动画
- mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
- R.anim.push_left_in))
- // 设置View退出屏幕时候使用的动画
- mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
- R.anim.push_left_out));
- mFlipper.showNext();
- } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
- && Math.abs(velocityX) > FLING_MIN_VELOCITY) {
- // 当像右侧滑动的时候
- mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
- R.anim.push_right_in));
- mFlipper.setOutAnimation(AnimationUtils.loadAnimation(this,
- R.anim.push_right_out));
- mFlipper.showPrevious();
- }
- return false;
- }
- public void onLongPress(MotionEvent e) {
- }
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
- float distanceY) {
- return false;
- }
- public void onShowPress(MotionEvent e) {
- }
- public boolean onSingleTapUp(MotionEvent e) {
- return false;
- }
- public boolean onTouch(View v, MotionEvent event) {
- // 一定要将触屏事件交给手势识别类去处理(自己处理会很麻烦的)
- return mGestureDetector.onTouchEvent(event);
- }
- }
进入动画
- <?xml version="1.0" encoding="utf-8"?>
- <set xmlns:android="http://schemas.android.com/apk/res/android">
- <translate android:fromXDelta="100%p" android:toXDelta="0"
- android:duration="500" />
- <alpha android:fromAlpha="0.1" android:toAlpha="1.0"
- android:duration="500" />
- </set>
评论暂时关闭