设置向导界面跳转
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(this, new 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();
}
|