zoukankan      html  css  js  c++  java
  • GestureDetector学习之左右滑动,上下滑动屏幕切换页面

    要实现滑屏等触发事件,视情况而定;

    如果实现的触屏或者手势效果较多,则使用第一种方法,实现OnGestureListener 接口(参考OnGestureListener);

    如果只是实现较少的效果,则考虑使用SimpleOnGestureListener(参考SimpleOnGestureListenter);主要分为以下三步:

    第一种方法:

    1、继承OnTouchListener , OnGestureListener ;

    //继承OnTouchListener,OnGestureListener
    public class MainActivity extends Activity implements OnTouchListener,OnGestureListener{

    :此处使用的OnGestureListener来自包 android.view.GestureDetector.OnGestureListener;而不是 android.gesture.GestureOverlayView.OnGestureListener;

    2、初始化OnGestureListener ,即注册手势监听 ;获得当前接受操作的布局id ; 注册触屏监听;

    //手势监听
    mGestureDetector = new GestureDetector(MainActivity.this,(OnGestureListener) this);//(OnGestureListener) 可以省略
    //获得当前接受操作的布局id
    RelativeLayout mActivity = (RelativeLayout)findViewById(R.id.main_activity);
    //触屏监听
    mActivity.setOnTouchListener(this);
    mActivity.setLongClickable(true);

    3、重载onFling()和onTouch();

    public boolean onTouch(View v, MotionEvent event) {
    	return mGestureDetector.onTouchEvent(event);
    }
    	
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            //省略
    }


    第二种方法如下:

    1、继承OnTouchListener  ;

    //继承OnTouchListener
    public class MainActivity extends Activity implements OnTouchListener{

    2、初始化OnGestureListener ,即注册手势监听 ;获得当前接受操作的布局id ; 注册触屏监听;

    //手势监听
    mGestureDetector = new GestureDetector(MainActivity.this,new MySimpleOnGestureListener());//下边定义MySimpleOnGestureListener,
                                                                                              //并使其继承SimpleOnGestureListener类
    //获得当前接受操作的布局id
    RelativeLayout mActivity = (RelativeLayout)findViewById(R.id.main_activity);
    //触屏监听
    mActivity.setOnTouchListener(this);
    mActivity.setLongClickable(true);

    3、定义SimpleOnGestureListener子类,并重载onTouch()和所需方法;

    class MySimpleGestureListener extends SimpleOnGestureListener{
    		@Override 
    		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    			
    			//大于设定的最小滑动距离并且在水平/竖直方向速度绝对值大于设定的最小速度,则执行相应方法
    			if(e1.getX()-e2.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){
    	    		Toast.makeText(MainActivity.this, "turn left", Toast.LENGTH_SHORT).show();
    		    		
    		    }else if(e2.getX() - e1.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){
    	    		Toast.makeText(MainActivity.this, "turn right", Toast.LENGTH_SHORT).show();
    	    		
    		    }else if(e1.getY()-e2.getY() > 20 && Math.abs(velocityY) > 10){
    		    	Toast.makeText(MainActivity.this, "turn up", Toast.LENGTH_SHORT).show();
    		    	
    		    }else if(e2.getY()-e1.getY() > 20 && Math.abs(velocityY) > 10){
    		    	Toast.makeText(MainActivity.this, "turn down", Toast.LENGTH_SHORT).show();
    		    }
    	    	
    	    	return false;
    	    }
    		
    	     @Override
    	     public boolean onDown(MotionEvent e){
    		Toast.makeText(MainActivity.this, "onDown", Toast.LENGTH_SHORT).show();
    		return false;
    	     }
    	}


    具体代码如下:

    (第一种方法)

    import android.app.Activity;
    import android.content.Intent;
    
    import android.os.Bundle;
    import android.util.Log;
    import android.view.GestureDetector;
    import android.view.GestureDetector.OnGestureListener;
    import android.view.GestureDetector.SimpleOnGestureListener;
    import android.view.Menu;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.widget.*;
    
    public class MainActivity extends Activity implements OnTouchListener,OnGestureListener{
            private static final String tag = "mainActivity";
    	
    	private GestureDetector mGestureDetector;
    	private int verticalMinistance = 20;	        //水平最小识别距离
    	private int minVelocity = 10;			//最小识别速度
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            //手势监听
            mGestureDetector = new GestureDetector(MainActivity.this,(OnGestureListener) this);//(OnGestureListener) 可以省略
            //获得当前接受操作的布局id
            RelativeLayout mActivity = (RelativeLayout)findViewById(R.id.main_activity);
            //触屏监听
            mActivity.setOnTouchListener(this);
            mActivity.setLongClickable(true);
            
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
    	@Override
    	public boolean onTouch(View v, MotionEvent event) {
    		return mGestureDetector.onTouchEvent(event);
    	}
    	
    	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    		
    	     //大于设定的最小滑动距离并且在水平/竖直方向速度绝对值大于设定的最小速度,则执行相应方法
    	    if(e1.getX()-e2.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){
                    //在此处实现跳转
                    //Intent intent  = new Intent(MainActivity.this,nextActivity.class);
        		//startActivity(intent);
                   
        		Toast.makeText(MainActivity.this, "turn left", Toast.LENGTH_SHORT).show();
    	    		
    	    }else if(e2.getX() - e1.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){
        		Toast.makeText(MainActivity.this, "turn right", Toast.LENGTH_SHORT).show();
        		
    	    }else if(e1.getY()-e2.getY() > 20 && Math.abs(velocityY) > 10){
    	    	Toast.makeText(MainActivity.this, "turn up", Toast.LENGTH_SHORT).show();
    	    	
    	    }else if(e2.getY()-e1.getY() > 20 && Math.abs(velocityY) > 10){
    	    	Toast.makeText(MainActivity.this, "turn down", Toast.LENGTH_SHORT).show();
    	    }
    	    	
    	    return false;
    	}
    
    	//只要有触发就会调用次方法
    	@Override
    	public boolean onDown(MotionEvent e) {
    		Toast.makeText(MainActivity.this, "onDown", Toast.LENGTH_SHORT).show();
    		return false;
    	}
    
    	@Override
    	public void onLongPress(MotionEvent e) {
    		Toast.makeText(MainActivity.this, "onLongPress", Toast.LENGTH_SHORT).show();
    		
    	}
    
    	@Override
    	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    		
    //		Toast.makeText(MainActivity.this, "onScroll", Toast.LENGTH_SHORT).show();
    		return false;
    	}
    
    
    	@Override
    	public void onShowPress(MotionEvent e) {
    //		Toast.makeText(MainActivity.this, "onShowPress", Toast.LENGTH_SHORT).show();
    	}
    
    	@Override
    	public boolean onSingleTapUp(MotionEvent e) {
    //		Toast.makeText(MainActivity.this, "onsingleTapup", Toast.LENGTH_SHORT).show();
    		return false;
    	}	  
    }

    (第二种方法)

    import android.app.Activity;
    import android.content.Intent;
    
    import android.os.Bundle;
    import android.util.Log;
    import android.view.GestureDetector;
    import android.view.GestureDetector.OnGestureListener;
    import android.view.GestureDetector.SimpleOnGestureListener;
    import android.view.Menu;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.widget.*;
    
    public class MainActivity extends Activity implements OnTouchListener{
    	private static final String tag = "mainActivity";
    	
    	private GestureDetector mGestureDetector;
    	private int verticalMinistance = 20;	        //水平最小识别距离
    	private int minVelocity = 10;			//最小识别速度
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            //手势监听
            mGestureDetector = new GestureDetector(MainActivity.this,new LearnGestureListener());
            //获得当前接受操作的布局id
            RelativeLayout mActivity = (RelativeLayout)findViewById(R.id.main_activity);
            //触屏监听
            mActivity.setOnTouchListener(this);
            mActivity.setLongClickable(true);
            
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
    	@Override
    	public boolean onTouch(View v, MotionEvent event) {
    		return mGestureDetector.onTouchEvent(event);
    	}
    	
    	class LearnGestureListener extends SimpleOnGestureListener{
    		@Override 
    		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    			
    			//大于设定的最小滑动距离并且在水平/竖直方向速度绝对值大于设定的最小速度,则执行相应方法
    			if(e1.getX()-e2.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){
    	    		Toast.makeText(MainActivity.this, "turn left", Toast.LENGTH_SHORT).show();
    		    		
    		    }else if(e2.getX() - e1.getX() > verticalMinistance && Math.abs(velocityX) > minVelocity){
    	    		Toast.makeText(MainActivity.this, "turn right", Toast.LENGTH_SHORT).show();
    	    		
    		    }else if(e1.getY()-e2.getY() > 20 && Math.abs(velocityY) > 10){
    		    	Toast.makeText(MainActivity.this, "turn up", Toast.LENGTH_SHORT).show();
    		    	
    		    }else if(e2.getY()-e1.getY() > 20 && Math.abs(velocityY) > 10){
    		    	Toast.makeText(MainActivity.this, "turn down", Toast.LENGTH_SHORT).show();
    		    }
    	    	
    	    	return false;
    	    }
    		
    		@Override
    		public boolean onDown(MotionEvent e){
    			Toast.makeText(MainActivity.this, "onDown", Toast.LENGTH_SHORT).show();
    			return false;
    		}
    	}
     
    }
    
    
    
    
    
    


  • 相关阅读:
    由chkconfig 引发的联想——怎么查看程序是否已经安装/成功安装
    C#反射动态调用dll中的方法,并返回结果
    走过2011年终总结
    Ext.Net系列:二Event之DirectEvents
    缇 、 像素 、 厘米
    Ext.Net系列:二Event之DirectEvent 示例1调用事件顺序
    Ext.Net系列:二Event之DirectEvent 示例2(Delay)
    html符号标签
    ubuntu11.10 安装tplink usb无线网卡 tlwn725n
    GridView 行颜色变化
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3202732.html
Copyright © 2011-2022 走看看