标签:
package com.xbrother.mobilecheck.base; import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.VelocityTracker; import android.widget.Toast; import com.xbrother.mobilecheck.PatrolApplication; import com.xbrother.mobilecheck.R; import java.util.Timer; import java.util.TimerTask; /** * BaseActivity定义,子类必须实现其中的几个初始化方法 * <p>Title: BaseActivity.java</p> * <p>Description: </p> * <p>Company: 深圳市共济科技有限公司</p> * * @author qucun * @version <版本号> @date < 2015-11-13> @modified <修改人姓名> * @date 2015-11-13 * @history ********************************************************************* * @comment ********************************************************************* */ public abstract class BaseActivity extends Activity { public static boolean isOpenDistanceBack = true; private boolean isExit = false; //手指上下滑动的最大速度 private static final int YSPEED_MAX = 1000; // 手指向右移动的最小距离 private static final int XDISTANCE_MIN = 100; // 手指向上或向下滑动的最大距离 private static final int YDISTANCE_MAX = 100; // 手指按下时候的x/y坐标,移动时的x/y坐标 private float xDown, yDown, xMove, yMove; private VelocityTracker mVelocityTracker; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); PatrolApplication.addActivity(this); // 初始化组件 initViews(); // 初始化数据 initDatas(); // 初始化事件监听 initListeners(); } /** * <初始化activity中包含的组件> */ public abstract void initViews(); /** * 初始化组件的事件监听 */ public abstract void initListeners(); /** * 初始化数据源 */ public abstract void initDatas(); /* @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK){ exitBy2Click(); } return false; } *//** * 双击返回键退出应用程序 */ private void exitBy2Click() { Timer tExit = null; if(isExit == false){ isExit = true; //准备退出 Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); // 设置定时器,如果2s内没有继续点击返回,取消退出准备 tExit = new Timer(); tExit.schedule(new TimerTask() { @Override public void run() { isExit = false; // 取消退出 } }, 2000); }else { // finish(); PatrolApplication.exitApp(); System.exit(0); } } /** * 界面滑动事件响应处理 * @param ev * @return */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { createVelocityTracker(ev); switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: xDown = ev.getRawX(); yDown = ev.getRawY(); break; case MotionEvent.ACTION_MOVE: xMove = ev.getRawX(); yMove = ev.getRawY(); break; case MotionEvent.ACTION_UP: //计算滑动的距离 int distanceX = (int) (xMove - xDown); int distanceY = (int) (yMove - yDown); int ySpeed = getScrollVelocity(); // 关闭Activity需满足以下条件: // 1. x轴滑动的距离大于 XDISTANCE_MIN(设定的x轴最小移动距离) // 2. y轴滑动的距离在 YDISTANCE_MAX(设定的y轴最大移动距离) // 3. y轴上滑动速度小于设定的YSPEED_MAX(设定的最大滑动速度),否则认为是上下滑动而不是右滑结束activity // 4. 子activity中设置isOpenDistanceBack为true即打开状态,才能进行滑动返回 if (distanceX > XDISTANCE_MIN && ySpeed < YSPEED_MAX && (distanceY < YDISTANCE_MAX && distanceY > -YDISTANCE_MAX) && isOpenDistanceBack) { finish(); //方法必须在startActivity()或者finish()之后执行,才有效果 overridePendingTransition(R.anim.in_from_left, R.anim.out_from_right); } recycleVelocityTracker(); break; } return super.dispatchTouchEvent(ev); } /** * 创建VelocityTracker对象,并将触摸界面的滑动事件加入到VelocityTracker中 * * @param ev */ private void createVelocityTracker(MotionEvent ev) { if (mVelocityTracker == null) { mVelocityTracker = VelocityTracker.obtain(); } mVelocityTracker.addMovement(ev); } /** * 计算每秒钟y方向滑动的距离 * * @return */ private int getScrollVelocity() { mVelocityTracker.computeCurrentVelocity(1000); int velocity = (int) mVelocityTracker.getYVelocity(); return Math.abs(velocity); } /** * 回收VelocityTracker对象 */ private void recycleVelocityTracker() { mVelocityTracker.recycle(); mVelocityTracker = null; } }
package com.xbrother.mobilecheck.base;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.widget.Toast;
import com.xbrother.mobilecheck.PatrolApplication;
import com.xbrother.mobilecheck.R;
import java.util.Timer;
import java.util.TimerTask;
/**
* BaseActivity定义,子类必须实现其中的几个初始化方法
* <p>Title: BaseActivity.java</p>
* <p>Description: </p>
* <p>Company: 深圳市共济科技有限公司</p>
*
* @author qucun
* @version <版本号> @date < 2015-11-13> @modified <修改人姓名>
* @date 2015-11-13
* @history *********************************************************************
* @comment *********************************************************************
*/
public abstract class BaseActivity extends Activity {
public static boolean isOpenDistanceBack = true;
private boolean isExit = false;
//手指上下滑动的最大速度
private static final int YSPEED_MAX = 1000;
// 手指向右移动的最小距离
private static final int XDISTANCE_MIN = 100;
// 手指向上或向下滑动的最大距离
private static final int YDISTANCE_MAX = 100;
// 手指按下时候的x/y坐标,移动时的x/y坐标
private float xDown, yDown, xMove, yMove;
private VelocityTracker mVelocityTracker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PatrolApplication.addActivity(this);
// 初始化组件
initViews();
// 初始化数据
initDatas();
// 初始化事件监听
initListeners();
}
/**
* <初始化activity中包含的组件>
*/
public abstract void initViews();
/**
* 初始化组件的事件监听
*/
public abstract void initListeners();
/**
* 初始化数据源
*/
public abstract void initDatas();
/*
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK){
exitBy2Click();
}
return false;
}
*//**
* 双击返回键退出应用程序
*/
private void exitBy2Click() {
Timer tExit = null;
if(isExit == false){
isExit = true; //准备退出
Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
// 设置定时器,如果2s内没有继续点击返回,取消退出准备
tExit = new Timer();
tExit.schedule(new TimerTask() {
@Override
public void run() {
isExit = false; // 取消退出
}
}, 2000);
}else {
// finish();
PatrolApplication.exitApp();
System.exit(0);
}
}
/**
* 界面滑动事件响应处理
* @param ev
* @return
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
createVelocityTracker(ev);
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDown = ev.getRawX();
yDown = ev.getRawY();
break;
case MotionEvent.ACTION_MOVE:
xMove = ev.getRawX();
yMove = ev.getRawY();
break;
case MotionEvent.ACTION_UP:
//计算滑动的距离
int distanceX = (int) (xMove - xDown);
int distanceY = (int) (yMove - yDown);
int ySpeed = getScrollVelocity();
// 关闭Activity需满足以下条件:
// 1. x轴滑动的距离大于 XDISTANCE_MIN(设定的x轴最小移动距离)
// 2. y轴滑动的距离在 YDISTANCE_MAX(设定的y轴最大移动距离)
// 3. y轴上滑动速度小于设定的YSPEED_MAX(设定的最大滑动速度),否则认为是上下滑动而不是右滑结束activity
// 4. 子activity中设置isOpenDistanceBack为true即打开状态,才能进行滑动返回
if (distanceX > XDISTANCE_MIN && ySpeed < YSPEED_MAX
&& (distanceY < YDISTANCE_MAX && distanceY > -YDISTANCE_MAX) && isOpenDistanceBack) {
finish();
//方法必须在startActivity()或者finish()之后执行,才有效果
overridePendingTransition(R.anim.in_from_left, R.anim.out_from_right);
}
recycleVelocityTracker();
break;
}
return super.dispatchTouchEvent(ev);
}
/**
* 创建VelocityTracker对象,并将触摸界面的滑动事件加入到VelocityTracker中
*
* @param ev
*/
private void createVelocityTracker(MotionEvent ev) {
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
}
mVelocityTracker.addMovement(ev);
}
/**
* 计算每秒钟y方向滑动的距离
*
* @return
*/
private int getScrollVelocity() {
mVelocityTracker.computeCurrentVelocity(1000);
int velocity = (int) mVelocityTracker.getYVelocity();
return Math.abs(velocity);
}
/**
* 回收VelocityTracker对象
*/
private void recycleVelocityTracker() {
mVelocityTracker.recycle();
mVelocityTracker = null;
}
}
标签:
原文地址:http://www.cnblogs.com/qu-xinyang/p/5565408.html