[mobilesafe] 11_设置向导界面跳转-按钮和手势

Android 4.0

设置向导界面跳转

1、注意:
1) 进行Activity跳转的时候,跳转到另外一个Activity后,记得将当前的Activity销毁掉
this.finish();
2) 用的是e1.getRawX(),而不是getX()
3) 水平方向x轴,e1.getRawX()-e2.getRawX()>100,下一步(e1为起点坐标,e2为终点坐标)
e2.getRawX()-e1.getRawX()>100 上一步
4)竖直y轴上,|
e1.getRawY()-e2.getRawY()|>100,表示手势为竖直方向了,为非法手势
2、手势识别-上一步和下一步的手势


a)  注册一个手势识别器   
private GestureDetector gestureDetector;
gestureDetector = new GestureDetector(thisnew SimpleOnGestureListener(){
            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2,  //触摸
                    float velocityX, float velocityY) { //单位是像素/每秒
                
                if (Math.abs(e1.getRawY()-e2.getRawY())>100) { //手势不正确
                    Toast.makeText(getApplicationContext(), "手势不正确", Toast.LENGTH_SHORT).show();
                    return true;
                }
                
                if (e1.getRawX()-e2.getRawX()>100) { //下一步
                    next(null);
                    return true;
                }
                if (e2.getRawX()-e1.getRawX()>100) {//上一步
                    previous(null);
                    return true;//true表示消耗此事件
                }
                
                return super.onFling(e1, e2, velocityX, velocityY); //true if the event is consumed, else false
            }
        });  
b) 在Activity中重写这个方法,在该Activity被触摸时调用,然后将该手势传递给手势识别器,检查手势,进行对应的操作。
// 4、被触摸的时候触发
    @Override
    public boolean onTouchEvent(MotionEvent event) {//识别这个触摸动作
        gestureDetector.onTouchEvent(event);// 将当前手势传递给手势识别器,手势识别器检查手势,做相应的动作。
        return super.onTouchEvent(event);
    }  


问题1:上一步和下一步的点击按钮方法,必须是public,不能是protected,因为底层的反射,没有获取getDeclaredMethdo(),只能反射获取一个public的方法。
@Override
protected void next(View view) {
    Intent intent = new Intent(this, WizardSetupActivity3.class);
    startActivity(intent);
}
@Override
protected void previous(View view) {
    Intent intent = new Intent(this, WizardSetupActivity1.class);
    startActivity(intent);
}
而应该为:
@Override
public void next(View view) {
    Intent intent = new Intent(this, WizardSetupActivity3.class);
    startActivity(intent);
    this.finish();
}
@Override
public void previous(View view) {
    Intent intent = new Intent(this, WizardSetupActivity1.class);
    startActivity(intent);
    this.finish();
}