• 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
  • 相关阅读:
    [置顶] RGB颜色查询对照表
    3.3FactoryMethod——工厂方法
    从零开始学C++之数据封装与抽象:分别用C和C++来实现一个链栈
    C# 自定义事件
    Qt4--加密日记本(子例化QMainWindow文本加密解密)
    SharePoint PerformancePoint Service-PowerShell
    Windows下安装Eric5时出现的“Sorry, please install QtHelp.”问题解决办法
    Char* ,CString ,WCHAR*之间的转换
    [C++基础]关键词volatile
    备忘--简单比较SPSS、RapidMiner、KNIME以及Kettle四款数据分析工具
  • 原文地址:https://www.cnblogs.com/tfxz/p/12621629.html
Copyright © 2020-2023  润新知