博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android------三种监听OnTouchListener、OnLongClickListener同时实现即其中返回值true或者false的含义...
阅读量:4954 次
发布时间:2019-06-12

本文共 5387 字,大约阅读时间需要 17 分钟。

引自:http://5200415.blog.51cto.com/3851969/1003113 

android应用中常用的监听OnTouchListener、OnClickListener、OnLongClickListener。

首先在Activity中创建一个button,然后对这个button同时设置OnTouchListener、OnClickListener、OnLongClickListener这三种监听方式。

 

package com.example.testlistenerdemo;    import android.os.Bundle;  import android.app.Activity;  import android.util.Log;  import android.view.Menu;  import android.view.MenuItem;  import android.view.MotionEvent;  import android.view.View;  import android.view.View.OnClickListener;  import android.view.View.OnLongClickListener;  import android.view.View.OnTouchListener;  import android.widget.Button;  import android.support.v4.app.NavUtils;    public class MainActivity extends Activity {        private Button button;      @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          button = (Button)findViewById(R.id.button);                    button.setOnTouchListener(touchListener);                    button.setOnClickListener(clickListener);                    button.setOnLongClickListener(longClickListener);      }            public OnTouchListener touchListener = new OnTouchListener() {                    @Override          public boolean onTouch(View v, MotionEvent event) {              //按下              if(event.getAction()==MotionEvent.ACTION_DOWN){                  Log.i("log","action_down");                  return true;              }else if(event.getAction()==MotionEvent.ACTION_UP){                  Log.i("log","action_up");                  return true;              }else if(event.getAction()==MotionEvent.ACTION_MOVE){                  Log.i("log","action_move");                  return true;              }              return false;          }      };             public OnClickListener clickListener = new OnClickListener() {                     @Override           public void onClick(View v) {               Log.i("long", "click");           }       };             public OnLongClickListener longClickListener = new OnLongClickListener() {                     @Override           public boolean onLongClick(View v) {               Log.i("long", "long click");               return false;            }        };         }

 

在都是返回true值的情况下,只会监听到onTouchListener。true,表示action_down 事件已经被消耗了不管你怎么的click或者longclick 都不会得到响应。

②:

改变onTouchListener里的代码。将true改为false。

  1. if(event.getAction()==MotionEvent.ACTION_DOWN){  
  2.                 Log.i("log","action_down");  
  3.                 return false;  
  4.             }  

效果为:

 

3个为一组。长按和短按按钮只会触发OnTouchListener、onLongClickListeneraction_down、action_up、

  • //按下 
  •             if(event.getAction()==MotionEvent.ACTION_DOWN){ 
  •                 Log.i("log","action_down"); 
  •                 return false; 
  •             }else if(event.getAction()==MotionEvent.ACTION_UP){ 
  •                 Log.i("log","action_up"); 
  •                 return false; 
  •             } 
  •  

    执行结果:

     

    前3个为短按。后4个为长按。

    ④:

    注意

    true时要注意。如果你同时使用这三种监听的话。action_up之后如果产生long click的话。button可是一直处于按下的状态。可以从控件的颜色上看得到。

    OnLongClickListener true和false在其中起着标志事件是否被消耗,如果消耗了就不再传递给其他控件了。如果没有消耗则还会传递给其他控件,触发其他控件的事件处理函数

    一个例子:

     

    画红色圆点随着鼠标点击拖动而拖动,看的到拖动的痕迹。

 

package com.example.viewdemo; import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout;  public class MainActivity extends Activity{      @Override     protected void onCreate(Bundle savedInstanceState) {         // TODO Auto-generated method stub         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         LinearLayout root = (LinearLayout)findViewById(R.id.root);         //创建DrawView组件         final DrawView draw = new DrawView(this);         //设置自定义组件的最大宽度和高度         draw.setMinimumWidth(300);         draw.setMinimumHeight(500);                  draw.setOnTouchListener(new View.OnTouchListener() {                          public boolean onTouch(View v, MotionEvent event) {                 draw.currentX = event.getX();                 draw.currentY = event.getY();                 //通知 组件重绘                 draw.invalidate();                 //返回true表明处理方法已经处理该事件                 return true;             }         });         root.addView(draw);     }      }
package com.example.viewdemo;  import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.LinearLayout;  public class MainActivity extends Activity{      @Override     protected void onCreate(Bundle savedInstanceState) {         // TODO Auto-generated method stub         super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);         LinearLayout root = (LinearLayout)findViewById(R.id.root);         //创建DrawView组件         final DrawView draw = new DrawView(this);         //设置自定义组件的最大宽度和高度         draw.setMinimumWidth(300);         draw.setMinimumHeight(500);                  draw.setOnTouchListener(new View.OnTouchListener() {                          public boolean onTouch(View v, MotionEvent event) {                 draw.currentX = event.getX();                 draw.currentY = event.getY();                 //通知 组件重绘                 draw.invalidate();                 //返回true表明处理方法已经处理该事件                 return true;             }         });         root.addView(draw);     }      }

这里的OnTouchListener事件,如果return false。不会看到圆点拖动的痕迹。而是鼠标点击才会出现在相应位置。

 

说明true表示,拖动圆点一系列是一个事件。

以后最后都使用return true;

 

转载于:https://www.cnblogs.com/Anita9002/p/4323760.html

你可能感兴趣的文章
Windows向Linux上传文件夹
查看>>
20180104-高级特性-Slice
查看>>
6个SQL Server 2005性能优化工具介绍
查看>>
nginx启动、关闭命令、重启nginx报错open() "/var/run/nginx/nginx.pid" failed
查看>>
day14 Python 内置函数、匿名函数和递归函数
查看>>
BZOJ 3097 Hash Killer I
查看>>
UINavigationController的视图层理关系
查看>>
html阴影效果怎么做,css 内阴影怎么做
查看>>
宏观经济
查看>>
译:面试投行的20个Java问题
查看>>
综合练习:词频统计
查看>>
BZOJ1026: [SCOI2009]windy数
查看>>
ASP.NET应用程序和ASP.NET网站所共有的文件: App_Browsers 等
查看>>
ASP.NET杂货店实战视频 VS2010+SQL2008 三层架构设计开发讲解
查看>>
样板操作数
查看>>
64位UBUNTU下安装adobe reader后无法启动
查看>>
动态缓存技术之CSI,SSI,ESI
查看>>
mac 上将.pem文件转为.pub文件
查看>>
整理下心情
查看>>
iTextSharp带中文转换出来的PDF文档显示乱码
查看>>