手势

2018-08-12  本文已影响0人  dev晴天
1 手势原理分析 (原理图略)


由手机的坐标系可知(左上角(0,0)向右为正,向下为正):

a 当你的手指从右向左滑动时 起始点的x坐标 > 终点的x坐标 当前页面跳转到下一页  (下一页 加载来) 

b 当你的手指从左向右滑动时 起始点的x坐标 < 终点的x坐标 当前页面跳转到上一页

加入 起始点x坐标 为e1 ,终点的为e2  可得

e1 - e2 > 0  从右向左滑动         当前页面跳转到下一页


e1 - e2 < 0  从左向右滑动         当前页面跳转到上一页

代码Demo:



package com.example.administrator.mobilesafe;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;


/**
 * Created by Administrator on 2017/9/12.
 */

// 第一个导航页面
public class Setup1Activity extends Activity{
    private GestureDetector gestureDetector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setup1);

        //  2 创建手势管理对象 用作管理在onTouchEvent(event)传递过来的数据
          gestureDetector =    new GestureDetector(this,new  GestureDetector.SimpleOnGestureListener(){
        // 此处不可直接 new  SimpleOnGestureListener()应为 此类为内部类 直接用实现方法太多
         // 可以通过  (GestureDetector.SimpleOnGestureListener())  GestureDetector 类调用在new

            //  此处重写 public boolean onFling方法  功能监听手势的移动
            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                // 参数 起始点 终点  在x y 轴的速度  通过e1 e2 的getX或Y() 获得 x 或y坐标
                if(e1.getX()-e2.getX()>0){
                    //   跳转到下一页 (代码复用粘贴即可)
                    startActivity(new Intent(getApplicationContext(),Setup2Activity.class));
                    finish();
                    // 开启平移动画  参数两个 enterAnim  exitanim
                    overridePendingTransition(R.anim.next_in_anim,R.anim.next_out_anim);
                }
                if(e1.getX()-e2.getX()<0){
                    //   跳转到上一页
                }

                return super.onFling(e1, e2, velocityX, velocityY);
            }
        });
    }

    // 按钮的点击事件  点击按钮跳转Setup2Activity页面
    public void nextPage(View view){
        startActivity(new Intent(getApplicationContext(),Setup2Activity.class));
        finish();
        // 开启平移动画  参数两个 enterAnim  exitanim
         overridePendingTransition(R.anim.next_in_anim,R.anim.next_out_anim);
    }





    /* 1
      监听屏幕上响应事件的类型 (按下(1次) 移动(多) 抬起(1))重写activity的
      onTouchEvent方法

          */
    @Override
    public boolean onTouchEvent(MotionEvent event) {

        // 3 通过手势处理类 接受多种类型的事件用作处理

        gestureDetector.onTouchEvent(event);//  对象调用触摸方法吧事件传过去
        return super.onTouchEvent(event);
    }
}

上一篇下一篇

猜你喜欢

热点阅读