引自: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;

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. Xcode8.2 继续使用插件

    网上参考了文章:http://www.jianshu.com/p/ab819babf2c3 使用的是:update_xcode_plugins . 但要注意的是,在Xcode 8.2下安装,并没有给我 ...

  2. 《Windows驱动开发技术详解》之驱动程序的同步处理

    中断请求级 中断请求被分为软件中断和硬件中断两种,这些中断都映射成不同级别的中断请求级.每个中断请求都有各自的优先级别,正在运行的线程随时都可以被中断打断,进入到中断处理程序.优先级高的中断来临时,处 ...

  3. mvc UrlHelper

    何谓Helper,其实就是在View中为了实现一些灵活功能而写的方法组. 其实ASP.NET MVC的View是Aspx的页面,本身可以声明定义方法,那为什么要有Helper呢? 其实无非是将界面与逻 ...

  4. C# WebBrowser函数互相调用

    在使用C#开发winform程序过程中,我们经常会碰到嵌入了一个WebBrowser的浏览器控件.很多时候,我们需要在程序里控制网页的显示方式,或者调用网页当中的某个JS函数,反过来,也有可能网页也需 ...

  5. hdu 2503 a/b + c/d

    Problem Description 给你2个分数,求他们的和,并要求和为最简形式.   Input 输入首先包含一个正整数T(T<=1000),表示有T组测试数据,然后是T行数据,每行包含四 ...

  6. 转载-SharePoint 2010 WebPart与Google地图系列 一:创建显示地图的WebPart

    [原] SharePoint 2010 WebPart与Google地图系列 一:创建显示地图的WebPart 摘要: 作为信息化先驱的产品SharePoint 2010竟然对GIS相关技术支持如此有 ...

  7. java使用iText生成pdf表格

    转载地址:http://www.open-open.com/code/view/1424011530749 首先需要你自己下载itext相关的jar包并添加引用,或者在maven中添加如下引用配置: ...

  8. Lvs+Keepalived+Bind+web构建高可用负载均衡系统

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://hatech.blog.51cto.com/8360868/1417899 --- ...

  9. 快速批量插入sqlserver方法之我见

    ---------------------------------------------------------------------------------------------------- ...

  10. jsp 页面取值

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...