Android------三种监听OnTouchListener、OnLongClickListener同时实现即其中返回值true或者false的含义
引自: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。
- if(event.getAction()==MotionEvent.ACTION_DOWN){
- Log.i("log","action_down");
- return false;
- }
效果为:
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的含义的更多相关文章
- iOS用三种途径实现一方法有多个返回值
以前觉得这种标题有点偏向于理论,实际开发中怎么会有这种诡异的需求,但是真正遇到了这种硬需求时觉得还是有那么点价值的,理论付诸了实践在此也就做了个整理. 以我私下开发中的一处代码为例,本意是希望有这么一 ...
- Java线程实现的第三种方式Callable方式与结合Future获取返回值
多线程的实现方式有实现Runnable接口和继承Thread类(实际上Thread类也实现了Runnable接口),但是Runnable接口的方式有两个弊端,第一个是不能获取返回结果,第二个是不能抛出 ...
- Android中Button的五种监听事件
简单聊一下Android中Button的五种监听事件: 1.在布局文件中为button添加onClick属性,Activity实现其方法2.匿名内部类作为事件监听器类3.内部类作为监听器4.Activ ...
- Android手机上监听短信的两种方式
Android手机上监听短信有两种方式: 1. 接受系统的短信广播,操作短信内容. 优点:操作方便,适合简单的短信应用. 缺点:来信会在状态栏显示通知信息. AndroidManifest.xml: ...
- Android三种左右滑动效果 手势识别
Android三种左右滑动效果 手势识别(转) 手势识别 1.onCreate中添加GestureDetector mGestureDetector; //监听手势事件 mGestureDetec ...
- Android零基础入门第34节:Android中基于监听的事件处理
原文:Android零基础入门第34节:Android中基于监听的事件处理 上一期我们学习了Android中的事件处理,也详细学习了Android中基于监听的事件处理,同时学会了匿名内部类形式,那么本 ...
- Android实现网络监听
一.Android Wifi常用广播 网络开发中主体会使用到的action: ConnectivityManager.CONNECTIVITY_ACTION WifiManager.WIFI_STAT ...
- Android 手势水平监听判断
package com.zihao.ui; import com.zihao.R; import android.os.Bundle; import android.app.Activity; imp ...
- Android三种基本的加载网络图片方式(转)
Android三种基本的加载网络图片方式,包括普通加载网络方式.用ImageLoader加载图片.用Volley加载图片. 1. [代码]普通加载网络方式 ? 1 2 3 4 5 6 7 8 9 10 ...
随机推荐
- C语言_愤怒的小鸟
// ConsoleApplication4.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<stdio.h> ...
- linux下制作u盘启动盘
格式化u盘为fat32 fdisk -l #查看U盘盘符,或者 df -T umount /dev/sdb #先卸载u盘 mkfs.vfat /dev/sdb #格式化为fat32模式,或者 mkfs ...
- thinkphp 实现微信公众号开发(二)--实现自定义菜单
IndexController.class.php <?php namespace Home\Controller; use Think\Controller; class IndexContr ...
- Inno Setup入门(十)——操作注册表
有些程序需要随系统启动,或者需要建立某些文件关联等问题,这些都是通过在安装程序中对注册表进行操作的结果.Inno Setup中通过[registry]段实现对注册表的操作. 本段说明: 参数列表: 参 ...
- 将undefault和null的数据转换成bool类型的数据 使用!!
<script> var o={}; var a=null; console.info(!!o.name); </script> 输出false 此方法是将undefault和 ...
- 学习笔记:GLSL Core Tutorial – Vertex Shader(内置变量说明)
1.每个Vertex Shader都有用户定义的输入属性,例如:位置,法线向量和纹理坐标等.Vertex Shaders也接收一致变量(uniform variables). uniform vari ...
- C#之控制台输入和输出
控制台输出 C# 控制台程序一般使用 .NET Framework Console 类提供的输入/输出服务.Console.WriteLine("Hello World!"); 语 ...
- oracle递归查询子节点
通过子节点向根节点追朔. select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid 通过根节 ...
- Gym 100917C Constant Ratio 数论+暴力
题目: Description standard input/outputStatements Given an integer n, find out number of ways to repre ...
- 初识Selenium(三)
浅谈基于Selenium的Web自动化测试框架 发表于:2011-4-25 10:58 作者:邵育亮 来源:51Testing软件测试网原创 字体:大 中 小 | 上一篇 | 下一篇 | 打印 ...