• GestureDetector- 滑屏手势方式实现


    今天做的项目中,需要使用滑屏来调出一个界面,经过自己的尝试,结合网上的方法,成功实现了。

    代码如下

    package com.example.text;
    
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.GestureDetector;
    import android.view.GestureDetector.OnGestureListener;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.MotionEvent;
    import android.widget.TextView;
    
    public class MainActivity extends Activity implements OnGestureListener {
         private GestureDetector mGestureDetector;
         private TextView tv;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            tv=(TextView) findViewById(R.id.tv);
    //这个如果直接写一个this,会提示过时。另外,如果两个参数都写成this,会报错。原因不知
    mGestureDetector
    = new GestureDetector(MainActivity.this, this); } @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 onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override public boolean onTouchEvent(MotionEvent event) { // TODO Auto-generated method stub //通过event自动判断手势,回调相应的方法 return mGestureDetector.onTouchEvent(event); }
    //按下屏幕触发,打印的是坐标
     @Override
    public boolean onDown(MotionEvent arg0) { // TODO Auto-generated method stub tv.setText(arg0.getX()+" "+arg0.getY()); return false; }
    //滑动屏幕的时候触发,打印的分别是起点跟终点的坐标
     @Override
    public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) { // TODO Auto-generated method stub tv.setText("arg1.getX()="+arg1.getX()+" arg0.getX()="+arg1.getY()+" arg2="+arg2+" arg3="+arg3); return true; } @Override public void onLongPress(MotionEvent arg0) { // TODO Auto-generated method stub } @Override public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) { // TODO Auto-generated method stub return false; } @Override public void onShowPress(MotionEvent arg0) { // TODO Auto-generated method stub } @Override public boolean onSingleTapUp(MotionEvent arg0) { // TODO Auto-generated method stub return false; } }

    这个类的使用步骤如下

    1.定义手势类:private GestureDetector mGestureDetector;

    2.初始化类:这个是跟其他控件设置监听一样的,有多种方法

      1)匿名内部类:

    mGestureDetector = new GestureDetector(MainActivity.this, new OnGestureListener() {
                
                @Override
                public boolean onSingleTapUp(MotionEvent arg0) {
                    // TODO Auto-generated method stub
                    return false;
                }
                
                @Override
                public void onShowPress(MotionEvent arg0) {
                    // TODO Auto-generated method stub
                    
                }
                
                @Override
                public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,
                        float arg3) {
                    // TODO Auto-generated method stub
                    return false;
                }
                
                @Override
                public void onLongPress(MotionEvent arg0) {
                    // TODO Auto-generated method stub
                    
                }
                
                @Override
                public boolean onFling(MotionEvent arg0, MotionEvent arg1, float arg2,
                        float arg3) {
                    // TODO Auto-generated method stub
                    return false;
                }
                
                @Override
                public boolean onDown(MotionEvent arg0) {
                    // TODO Auto-generated method stub
                    return false;
                }
            });

      2).直接让主类继承:

    public class MainActivity extends Activity implements OnGestureListener{
    
    }

      3).内部类

     class MyOnGestureListener  implements OnGestureListener{
    
    }

    3.在onTouchEvent()事件中使用这个类

       @Override
        public boolean onTouchEvent(MotionEvent event) {
            // TODO Auto-generated method stub
        
        
         //通过event自动判断手势,回调相应的方法       
        return mGestureDetector.onTouchEvent(event);
        
        }

    不过,现在还有一点不是很明白,就是方法中的return false跟return true有什么区别

     

  • 相关阅读:
    ExtAspNet应用技巧(二)
    JavaScript继承详解(六)
    ExtAspNet新版本发布,集成Extjs3.0,兼容IE浏览器
    ExtAspNet发展规划
    把Doc文档转换成rtf格式 (转载)
    提高Sql Server性能的10个技巧
    winform中树和数据库关联操作的例子(C#)
    为什么C#没有提供“缺省参数”
    让UML消失一段时间
    把RichTextBox中的文本保存到Sql Server中
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_gesturedetector_15013013.html
Copyright © 2020-2023  润新知