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

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

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

  1. package com.example.testlistenerdemo;
  2. import android.os.Bundle;
  3. import android.app.Activity;
  4. import android.util.Log;
  5. import android.view.Menu;
  6. import android.view.MenuItem;
  7. import android.view.MotionEvent;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.view.View.OnLongClickListener;
  11. import android.view.View.OnTouchListener;
  12. import android.widget.Button;
  13. import android.support.v4.app.NavUtils;
  14. public class MainActivity extends Activity {
  15. private Button button;
  16. @Override
  17. public void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main);
  20. button = (Button)findViewById(R.id.button);
  21. button.setOnTouchListener(touchListener);
  22. button.setOnClickListener(clickListener);
  23. button.setOnLongClickListener(longClickListener);
  24. }
  25. public OnTouchListener touchListener = new OnTouchListener() {
  26. @Override
  27. public boolean onTouch(View v, MotionEvent event) {
  28. //按下
  29. if(event.getAction()==MotionEvent.ACTION_DOWN){
  30. Log.i("log","action_down");
  31. return true;
  32. }else if(event.getAction()==MotionEvent.ACTION_UP){
  33. Log.i("log","action_up");
  34. return true;
  35. }else if(event.getAction()==MotionEvent.ACTION_MOVE){
  36. Log.i("log","action_move");
  37. return true;
  38. }
  39. return false;
  40. }
  41. };
  42. public OnClickListener clickListener = new OnClickListener() {
  43. @Override
  44. public void onClick(View v) {
  45. Log.i("long", "click");
  46. }
  47. };
  48. public OnLongClickListener longClickListener = new OnLongClickListener() {
  49. @Override
  50. public boolean onLongClick(View v) {
  51. Log.i("long", "long click");
  52. return false;
  53. }
  54. };
  55. }

在都是返回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;
  • }
    1.  

    执行结果:

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

    ④:

    注意:

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

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

    一个例子:

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

  1. package com.example.viewdemo;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.MotionEvent;
  5. import android.view.View;
  6. import android.widget.LinearLayout;
  7. public class MainActivity extends Activity{
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. // TODO Auto-generated method stub
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_main);
  13. LinearLayout root = (LinearLayout)findViewById(R.id.root);
  14. //创建DrawView组件
  15. final DrawView draw = new DrawView(this);
  16. //设置自定义组件的最大宽度和高度
  17. draw.setMinimumWidth(300);
  18. draw.setMinimumHeight(500);
  19. draw.setOnTouchListener(new View.OnTouchListener() {
  20. public boolean onTouch(View v, MotionEvent event) {
  21. draw.currentX = event.getX();
  22. draw.currentY = event.getY();
  23. //通知 组件重绘
  24. draw.invalidate();
  25. //返回true表明处理方法已经处理该事件
  26. return true;
  27. }
  28. });
  29. root.addView(draw);
  30. }
  31. }
  1. package com.example.viewdemo;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.MotionEvent;
  5. import android.view.View;
  6. import android.widget.LinearLayout;
  7. public class MainActivity extends Activity{
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. // TODO Auto-generated method stub
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_main);
  13. LinearLayout root = (LinearLayout)findViewById(R.id.root);
  14. //创建DrawView组件
  15. final DrawView draw = new DrawView(this);
  16. //设置自定义组件的最大宽度和高度
  17. draw.setMinimumWidth(300);
  18. draw.setMinimumHeight(500);
  19. draw.setOnTouchListener(new View.OnTouchListener() {
  20. public boolean onTouch(View v, MotionEvent event) {
  21. draw.currentX = event.getX();
  22. draw.currentY = event.getY();
  23. //通知 组件重绘
  24. draw.invalidate();
  25. //返回true表明处理方法已经处理该事件
  26. return true;
  27. }
  28. });
  29. root.addView(draw);
  30. }
  31. }

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

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

以后最后都使用return true;

Android------三种监听OnTouchListener、OnLongClickListener同时实现即其中返回值true或者false的含义的更多相关文章

  1. iOS用三种途径实现一方法有多个返回值

    以前觉得这种标题有点偏向于理论,实际开发中怎么会有这种诡异的需求,但是真正遇到了这种硬需求时觉得还是有那么点价值的,理论付诸了实践在此也就做了个整理. 以我私下开发中的一处代码为例,本意是希望有这么一 ...

  2. Java线程实现的第三种方式Callable方式与结合Future获取返回值

    多线程的实现方式有实现Runnable接口和继承Thread类(实际上Thread类也实现了Runnable接口),但是Runnable接口的方式有两个弊端,第一个是不能获取返回结果,第二个是不能抛出 ...

  3. Android中Button的五种监听事件

    简单聊一下Android中Button的五种监听事件: 1.在布局文件中为button添加onClick属性,Activity实现其方法2.匿名内部类作为事件监听器类3.内部类作为监听器4.Activ ...

  4. Android手机上监听短信的两种方式

    Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...

  5. Android三种左右滑动效果 手势识别

    Android三种左右滑动效果 手势识别(转)   手势识别 1.onCreate中添加GestureDetector mGestureDetector; //监听手势事件 mGestureDetec ...

  6. Android零基础入门第34节:Android中基于监听的事件处理

    原文:Android零基础入门第34节:Android中基于监听的事件处理 上一期我们学习了Android中的事件处理,也详细学习了Android中基于监听的事件处理,同时学会了匿名内部类形式,那么本 ...

  7. Android实现网络监听

    一.Android Wifi常用广播 网络开发中主体会使用到的action: ConnectivityManager.CONNECTIVITY_ACTION WifiManager.WIFI_STAT ...

  8. Android 手势水平监听判断

    package com.zihao.ui; import com.zihao.R; import android.os.Bundle; import android.app.Activity; imp ...

  9. Android三种基本的加载网络图片方式(转)

    Android三种基本的加载网络图片方式,包括普通加载网络方式.用ImageLoader加载图片.用Volley加载图片. 1. [代码]普通加载网络方式 ? 1 2 3 4 5 6 7 8 9 10 ...

随机推荐

  1. C语言_愤怒的小鸟

    // ConsoleApplication4.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<stdio.h> ...

  2. linux下制作u盘启动盘

    格式化u盘为fat32 fdisk -l #查看U盘盘符,或者 df -T umount /dev/sdb #先卸载u盘 mkfs.vfat /dev/sdb #格式化为fat32模式,或者 mkfs ...

  3. thinkphp 实现微信公众号开发(二)--实现自定义菜单

    IndexController.class.php <?php namespace Home\Controller; use Think\Controller; class IndexContr ...

  4. Inno Setup入门(十)——操作注册表

    有些程序需要随系统启动,或者需要建立某些文件关联等问题,这些都是通过在安装程序中对注册表进行操作的结果.Inno Setup中通过[registry]段实现对注册表的操作. 本段说明: 参数列表: 参 ...

  5. 将undefault和null的数据转换成bool类型的数据 使用!!

    <script> var o={}; var a=null; console.info(!!o.name); </script> 输出false 此方法是将undefault和 ...

  6. 学习笔记:GLSL Core Tutorial – Vertex Shader(内置变量说明)

    1.每个Vertex Shader都有用户定义的输入属性,例如:位置,法线向量和纹理坐标等.Vertex Shaders也接收一致变量(uniform variables). uniform vari ...

  7. C#之控制台输入和输出

    控制台输出 C# 控制台程序一般使用 .NET Framework Console 类提供的输入/输出服务.Console.WriteLine("Hello World!"); 语 ...

  8. oracle递归查询子节点

    通过子节点向根节点追朔. select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid 通过根节 ...

  9. Gym 100917C Constant Ratio 数论+暴力

    题目: Description standard input/outputStatements Given an integer n, find out number of ways to repre ...

  10. 初识Selenium(三)

    浅谈基于Selenium的Web自动化测试框架 发表于:2011-4-25 10:58  作者:邵育亮   来源:51Testing软件测试网原创 字体:大 中 小 | 上一篇 | 下一篇 | 打印 ...