zoukankan      html  css  js  c++  java
  • android 上下左右手势判断 根据别人的改的

    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();
        }
    
        
    }
    

      

  • 相关阅读:
    Extjs4.x Ext.tree.Panel基本树控件的使用案例、源码
    Extjs4 autoload和iframe的取舍
    Extjs4 文件目录结构
    IIS7.5 配置MVC3.0 伪静态,不能访问html伪静态页面
    DB2存储过程模版
    C#后台调用跨域MVC服务,带Cookie验证
    基于SenchaTouch项目案例
    EF Code First DataAnnotations
    找不到方法:“Void System.Data.Objects.ObjectContextOptions.set_UseConsistentNullReferenceBehavior(Boolean)”。
    Babylon 3D engine (Silverlight)
  • 原文地址:https://www.cnblogs.com/meieiem/p/2178313.html
Copyright © 2011-2022 走看看