引自: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. C++ 隐式类类型转换和转换操作符

    隐式类类型转换 C++语言定义了内置类型之间的几个自动转换.也可以定义如何将其他类型的对象隐式转换为我们的类类型,或将我们的类类型的对象隐式转换为其他类型.为了定义到类类型的隐式转换,需要定义合适的构 ...

  2. SMO 的环境

    Microsoft SQL Server System CLR Types - http://go.microsoft.com/fwlink/?LinkId=123721&clcid=0x40 ...

  3. leetcode441(巧妙利用取整和解方程)

    You have a total of n coins that you want to form in a staircase shape, where every k-th row must ha ...

  4. json 数组 对象 xml 之间转换(待补充)

    json 数组  xml 对象   之间转换(待补充) 1 把对象的类型或者数组转换成字符串类型(或者更确切的说是json类型的). 此处参考链接http://www.jb51.net/article ...

  5. Eclipse/MyEclipse中使用复制粘贴功能卡的解决办法

    最近在MyEclipse中编辑代码时,使用快捷键进行复制粘贴,经常会导致编辑器短暂的停顿,光标不跟随,居然反应不过来,几近假死. 想来想去应该是编辑上的什么配置或者是IDE的什么功能导致,于是进入Pr ...

  6. karma+jasmine自动化测试

    1.安装nodejs,进入项目目录 2.安装karma和相关插件 npm install karma --save-dev npm install karma-jasmine karma-chrome ...

  7. Unity 的ICallHander在C#项目中实现注入

    项目包引用: Install-Package Unity.Interception 创建项目的接口和其实类: public interface ICalculator { double Calcula ...

  8. sql server 2000/2005递归

    /* 递归查询 塗聚文---SQL Server 2005环境下的实现: */--生成测试数据 create table Dept(ID int,ParentID int,msg varchar(20 ...

  9. 设置标题小图标ico

    在head里添加 <link rel="shortcut icon" href="<%=request.getContextPath()%>/FlatU ...

  10. chrome浏览器调试功能之后端篇

    作为后端开发人员,可能有很多同学不怎么了解chrome调试功能,而即将成为大神的我们,怎么也得会,知其然更要知其所以然,今天我带领大家好好的梳理一下,chrome浏览器调试,个人把它分成了前端功能和后 ...