GestureUtils.java

package com.gesture;

import android.content.Context;
import android.util.DisplayMetrics;
import android.view.WindowManager; public class GestureUtils { //获取屏幕的大小
public static Screen getScreenPix(Context context) {
DisplayMetrics dm = new DisplayMetrics();
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
windowManager.getDefaultDisplay().getMetrics(dm);
return new Screen(dm.widthPixels,dm.heightPixels);
} public static class Screen{ public int widthPixels;
public int heightPixels; public Screen(){ } public Screen(int widthPixels,int heightPixels){
this.widthPixels=widthPixels;
this.heightPixels=heightPixels;
} @Override
public String toString() {
return "("+widthPixels+","+heightPixels+")";
} } }

  BuileGestureExt.java

package com.gesture;

import com.gesture.GestureUtils.Screen;

import android.content.Context;
import android.view.GestureDetector;
import android.view.MotionEvent; public class BuileGestureExt {
public static final int GESTURE_UP=0;
public static final int GESTURE_DOWN=1;
public static final int GESTURE_LEFT=2;
public static final int GESTURE_RIGHT=3;
private OnGestureResult onGestureResult;
private Context mContext;
public BuileGestureExt(Context c,OnGestureResult onGestureResult) {
this.mContext=c;
this.onGestureResult=onGestureResult;
screen = GestureUtils.getScreenPix(c);
}
public GestureDetector Buile()
{
return new GestureDetector(mContext, onGestureListener);
} private Screen screen;
private GestureDetector.OnGestureListener onGestureListener = new GestureDetector.SimpleOnGestureListener(){ @Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
float x = e2.getX() - e1.getX();
float y = e2.getY() - e1.getY();
//限制必须得划过屏幕的1/4才能算划过
float x_limit = screen.widthPixels / 4;
float y_limit = screen.heightPixels / 4;
float x_abs = Math.abs(x);
float y_abs = Math.abs(y);
if(x_abs >= y_abs){
//gesture left or right
if(x > x_limit || x < -x_limit){
if(x>0){
//right
doResult(GESTURE_RIGHT);
}else if(x<=0){
//left
doResult(GESTURE_LEFT);
}
}
}else{
//gesture down or up
if(y > y_limit || y < -y_limit){
if(y>0){
//down doResult(GESTURE_DOWN); }else if(y<=0){ //up doResult(GESTURE_UP); } } } return true; } }; public void doResult(int result) { if(onGestureResult!=null) { onGestureResult.onGestureResult(result); } } public interface OnGestureResult { public void onGestureResult(int direction); }}

  demo

package com.gesture;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.widget.Toast;
 
public class GesturetestActivity extends Activity {
    /** Called when the activity is first created. */
 
    private GestureDetector gestureDetector; 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        gestureDetector = new BuileGestureExt(this,new BuileGestureExt.OnGestureResult() {
            @Override
            public void onGestureResult(int direction) {
                show(Integer.toString(direction));
            }
        }
        ).Buile();
    }
 
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    }
    private void show(String value){
        Toast.makeText(this, value, Toast.LENGTH_SHORT).show();
    }
 
     
}

android 上下左右手势判断 根据别人的改的的更多相关文章

  1. Android 打开方式选定后默认了改不回来?解决方法(三星s7为例)

    Android 打开方式选定后默认了改不回来?解决方法(三星s7为例) 刚刚在测试东西,打开一个gif图,然后我故意选择用支付宝打开,然后...支付宝当然不支持,我觉得第二次打开它应该还会问我,没想到 ...

  2. Android 触摸手势基础 官方文档概览

    Android 触摸手势基础 官方文档概览 触摸手势检测基础 手势检测一般包含两个阶段: 1.获取touch事件数据 2.解析这些数据,看它们是否满足你的应用所支持的某种手势. 相关API: Moti ...

  3. Android 触摸手势基础 官方文档概览2

    Android 触摸手势基础 官方文档概览 触摸手势检测基础 手势检测一般包含两个阶段: 1.获取touch事件数据 2.解析这些数据,看它们是否满足你的应用所支持的某种手势. 相关API: Moti ...

  4. Android 网络连接判断与处理

    Android网络连接判断与处理  获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="and ...

  5. Android中如何判断是否联网

    首先在AndroidManifest.xml中添加与连接网络相关的权限: [xhtml]  view plain copy   <uses-permission android:name=&qu ...

  6. Zepto 添加手势判断拓展方法(思路+原理)

    一.前言 这几个月事情比较多,写了一些博客都没有来得及整理发布,今天刚好有一位同事在开发前端页面的时候用到了手势判断.所以翻出了之前写的 demo,顺便整理一下作为记录. 手势判断在各种应用中都十分常 ...

  7. Android 屏幕手势滑动中onFling()函数的技巧分析

    关于如何处理手势操作以及那四个基本固定的顺序我就不讲解了,这里直接跳到我们获得瞬间滑动后回调onFling()这个抽象函数时,应该如何根据参数比较准确的判断滑动方向.如果你没有前面的基础知识,你可以去 ...

  8. android GestureDetector 手势的判断

    import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.Ges ...

  9. android GestureDetector 手势基础

    1. 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(Vi ...

随机推荐

  1. iOS程序的启动图片图标规范

     

  2. Java解读内存,优化编程

    1.别用new Boolean 在很多场景中Boolean类型是必须的,比如JDBC中boolean类型的set与get都是通过Boolean封装传递的,大部分ORM也是用Boolean来封装bool ...

  3. java计算代码执行时间

    有时候为了排查性能问题,需要记录完成某个操作需要的时间,我们可以使用System类的currentTimeMillis()方法来返回当前的毫秒数,并保存到一个变量中,在方法执行完毕后再次调用 Syst ...

  4. Spring EL hello world实例

    Spring EL与OGNL和JSF EL相似,计算评估或在bean创建时执行.此外,所有的Spring表达式都可以通过XML或注解. 在本教程中,我们将学习如何使用Spring表达式语言(SpEL) ...

  5. Linux文件目录的一点小结

    转载:http://blog.chinaunix.net/uid-29171357-id-3889735.html 1. 相关指令:      chgrp:改变文件所属用户组 点击(此处)折叠或打开 ...

  6. sql 内连接、外连接、自然连接等各种连接

    1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 students和c ...

  7. 如何使用花生壳 发布WCF服务 进行外网访问 z

    http://www.cnblogs.com/wanglg/p/5375230.html 当我们发布WCF服务的时候,可以直接通过服务器的域名或者IP进行. 但是如果仅仅是通过花生壳进行域名解析,需要 ...

  8. Netty框架

    Netty框架新版本号:3.0.2.GA,于2008年11月19日公布.Netty项目致力于提供一个异步的.事件驱动的网络应用框架和工具,用于高速开发可维护的.高性能的.高扩展性的server和cli ...

  9. Linux C/C++开发工具

    1. vim + ctags + taglist + cscope + cppcomplete + global 2.emacs+插件 可以查看 http://blog.163.com/yu_hong ...

  10. iOS:UI简单的总结

    UI简单总结: 一.常用单例: NSBundle *bundel = [NSBundle mainBundle]; //加载资源 NSFileManager *fm = [NSFileManager  ...