基础Activity,实现活动返回控制

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;

@Overrideprotected 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() {            @Overridepublic void run() {               isExit = false; // 取消退出}         }, 2000);}else {//       finish();PatrolApplication.exitApp();

System.exit(0);}   }

    /**     * 界面滑动事件响应处理     * @param ev* @return*/@Overridepublic 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;}

}
时间: 2024-11-05 11:35:44

基础Activity,实现活动返回控制的相关文章

ActionBar基础学习之头部返回菜单

在开写之前需要先引入工程包lib_v7_appcompat,里面为我们提供了ActionBarActivity等许多相关类. 先新建一个activity来继承ActionBarActivity,在里面进行一些基本设置,如下: /** * ActionBar基础activity,进行统一的属性设置 <br> * 所有顶部带有actionbar的类都继承此类. * * @author leetoney * @time 2015年1月31日17:28:00 * */ public class Bas

Android基础:Activity

Activity基本概念 Activity代表活动窗口,通过Context加载页面显示内容,每一个Activity都必须在manifest.xml中注册. 一个应用程序由多个界面构成,回退栈,活动窗口,新窗口加入,旧窗口压入栈 继承了Activity的类都包括: onCreate() 方法内部有setContextView(int layoutResID), 会加载资源文件; onPause() 用户离开Activity,系统会自动调用,但是Activity并没有被销毁,在这个生命周期里数据需要

C语言基础学习7:返回指针值的函数

一个函数可以返回一个整型值.字符值.实型值等,也可以返回指针型的数据,即地址,返回的是指针类型. 返回指针值的函数的一般定义形式为; 数据类型 *函数名(参数列表) 例如: int *a(int x, int y); a作为函数名,调用它之后能得到一个指向整型数据的指针(地址). ()优先级高于*,因此a先与()结合,这是函数形式,返回值为指针形式. 1 #include <stdio.h> 2 float *search(float (*pointer)[4]); 3 float *sear

速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

[源码下载] 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函数返回值 可变函数 匿名函数 闭包函数 回调函数 示例1.函数的相关知识点 1(基础)function/function1.php <?php /** * 函数的相关知识点 1(基础) */ // 可以在相关的 function 声明语句之前调用该函数 f1(); function f1() { echo "f1"; echo "<br />"; } // 这里调用

Android总结 - Activity任务和返回栈、保存Activity的状态

任务和返回栈 一个应用程序当中通常都会包含很多个Activity,每个Activity都应该设计成为一个具有特定的功能,并且可以让用户进行操作的组件.另外,Activity之间还应该是可以相互启动的.比如,一个邮件应用中可能会包含一个用于展示邮件列表的Activity,而当用户点击了其中某一封邮件的时候,就会打开另外一个Activity来显示该封邮件的具体内容. 除此之外,一个Activity甚至还可以去启动其它应用程序当中的Activity.打个比方,如果你的应用希望去发送一封邮件,你就可以定

第七章、函数基础之函数的返回值04

目录 第七章.函数基础之函数的返回值04 一.什么是返回值 二.为什么要有返回值 第七章.函数基础之函数的返回值04 一.什么是返回值 函数内部代码经过一些列逻辑处理获得的结果. def func(): name = 'nick' return name name = func() print(name) nick 二.为什么要有返回值 如果需要在程序中拿到函数的处理结果做进一步的处理,则需要函数必须要有返回值 注意: return是函数结束的标志 return的返回值可以返回任意数据类型 re

Android基础——Activity的状态,创建和结束

注意 onRestart的箭头是弄错了,应该指向onStart MainActivity的布局文件和java代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/

Android基础——调用Activity并获得返回值

图像选择:Main中点击选择图像按钮,启动Head活动用来选择图像, 然后将被选择图像通过bundle发送给Main,同时附带返回值,方便Main来判断 Head布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="

标准app基础模板建立-活动管理-定时服务-键值对存储-日志工具

一.建立工程 1.建立一个空白的工程,名称为ModelApp. 2.在main-java下新建package,起名com.jiaweiqiang.tools,用于放置通用工具类. 二.建立得到全局变量的Application类 1.在tools中新建MyApplication类,用于存储全局context和其他程序需要的通用变量. public class MyApplication extends Application { private static Context context; pr