zoukankan      html  css  js  c++  java
  • Android--控件的滑动事件

    感谢大佬:https://www.cnblogs.com/zkb-0928/p/3768209.html 感谢大佬:https://blog.csdn.net/sweiqin/article/details/50847996

    在android开发中,我们经常会用到一种非常方便的效果,就是左右或上下滑动进行切换内容或控件,比如要删除一条信息,向左滑动会出现一个删除功能键进行删除。

    要实现这个功能我们就可以使用onTouch事件来处理,具体代码如下:

    package com.example.text;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnTouchListener;
    import android.widget.TextView;
    
    public class MainActivity extends Activity {
        private TextView txtTest;
        
        private float moveX;
        private float moveY;
        private float pressX;
        private float pressY;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            txtTest = (TextView)findViewById(R.id.txtTest);
            
            
            txtTest.setOnTouchListener(new OnTouchListener() {
                
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()) {
                    //按下
                    case MotionEvent.ACTION_DOWN:
                        pressX = event.getX();
                        pressY = event.getY();
                        break;
                    //移动
                    case MotionEvent.ACTION_MOVE:
                        moveX = event.getX();
                        moveY = event.getY();
                        break;
                    //松开
                    case MotionEvent.ACTION_UP:
                        if (moveX-pressX > 0 && Math.abs(moveY - pressY) < 50) {
                            Log.i("message", "向右");
                        } else if (moveX - pressX < 0 && Math.abs(moveY - pressY) < 50) {
                            Log.i("message", "向左");
                        }
                        break;
                    default:
                        break;
                    }
                    return true;
                }
            });
        }
    
    }
    
    1、
    若return false说明没有成功执行onTouch事件,在执行完onTouch里面的代码之后,onTouch事件并没有结束。因此某些组件如Gallery会自动执行它所在view里onTouch方法的代码。若在onTouch方法里面增加你的代码并且最后return false就会执行你在OnTouch方法中的处理操作了。 

    2、
    若return true说明你已经成功执行onTouch方法了,在执行完onTouch中的代码之后,这个onTouch事件就结束了。也不会再调用组件如Gallery默认的onTouch方法了。在onTouch方法中,我们可以做很多操作,如move,down,up等等,若我们在move里面return false,那么接着的fling,up等后面的事件也不会处理。 

    Gallery.setOnTouchListener(new OnTouchListener(){  

        //@Override  
        public boolean onTouch(View v, MotionEvent event) {  
    System.out.println("Gallery onTouch");  
    if(event.getAction()==MotionEvent.ACTION_MOVE){  
       mDismiss.removeMessages(1);  
       System.out.println("ACTION_MOVE ");  
         
    }else if(event.getAction()==MotionEvent.ACTION_UP){  
       mDismiss.sendEmptyMessageDelayed(1,10000);  
       System.out.println("ACTION_UP ");  
    }  
    return false;  
        }  
          
    }); 
     
    注意:
    1.
    在ViewGroup中onInterceptTouchEvent方法若反回false,那么触屏事件会继续向下传递,但如果没有子View去处理这个事件,即子view的onTouchEvent没有返回True,则最后还是由ViewGroup去处理这个事件,也就又执行了自己的onTouchEvent。
    2.
    onTouch调用前会自动调用onInterceptTouchEvent 如果onInterceptTouchEvent返回的false,则不会调用onTouchEvent,若重写onInterceptTouchEvent让它在需要调用onTouchEvent时返回true
  • 相关阅读:
    Android传递中文参数方法(之一)
    配置类与yaml
    修改ip失败,一个意外的情况处理方法
    oracle 自增序列与触发器
    Excel导入数据带小数点的问题
    数据库null与空的区别
    小米手机无法打开程序报错Unable to instantiate application com.android.tools.fd.runtime.BootstrapApplication的解决办法
    gradle类重复的问题解决方法
    windowSoftInputMode属性讲解
    android studio 的配置
  • 原文地址:https://www.cnblogs.com/tfxz/p/12621629.html
Copyright © 2011-2022 走看看