Android ontouch 拖动与点击事件冲突解决方式
来源:互联网 发布:订单管理数据流程图 编辑:程序博客网 时间:2024/06/17 09:01
有一个控件,既支持拖动又需要支持点击事件,当使用ontouch事件,可以实现拖动,但这时候当up的时候,就会同时相应点击事件,当现在的需求是拖动的时候不能响应点击事件,找到如下方法:
1.设置一个全局的变量isclick,默认为false,当ontouch中down时,重新设为false,当move的时候设置为false,接着就进入up的方法里面,如果此时可以对时间进行判断,当判断从点击到移动的时间超过500ms的话,就不应该响应点击事件,设置isclick为true,也就是消费此事件,不接着让点击事件响应,如下代码:
package com.oppo.examples;import android.app.Activity;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.view.View.OnTouchListener;import android.widget.Button;import android.widget.ImageView;import android.widget.Toast;public class DraftTest extends Activity implements OnTouchListener {/** Called when the activity is first created. */int screenWidth;int screenHeight;int lastX;int lastY;private long startTime = 0;private long endTime = 0;private boolean isclick;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);DisplayMetrics dm = getResources().getDisplayMetrics();screenWidth = dm.widthPixels;screenHeight = dm.heightPixels - 50;Button button = (Button) findViewById(R.id.btn);ImageView imageView = (ImageView) findViewById(R.id.btn2);imageView.setOnTouchListener(this);button.setOnTouchListener(this);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {Toast.makeText(DraftTest.this, "点击和拖动并存", Toast.LENGTH_SHORT).show();}});}@Overridepublic boolean onTouch(View v, MotionEvent event) {int action = event.getAction();switch (action) {case MotionEvent.ACTION_DOWN:lastX = (int) event.getRawX();lastY = (int) event.getRawY();isclick = false;//当按下的时候设置isclick为false,具体原因看后边的讲解 startTime = System.currentTimeMillis();System.out.println("执行顺序down");break;/** * layout(l,t,r,b) l Left position, relative to parent t Top position, * relative to parent r Right position, relative to parent b Bottom * position, relative to parent * */case MotionEvent.ACTION_MOVE:System.out.println("执行顺序move");isclick = true;//当按钮被移动的时候设置isclick为trueint dx = (int) event.getRawX() - lastX;int dy = (int) event.getRawY() - lastY;int left = v.getLeft() + dx;int top = v.getTop() + dy;int right = v.getRight() + dx;int bottom = v.getBottom() + dy;if (left < 0) {left = 0;right = left + v.getWidth();}if (right > screenWidth) {right = screenWidth;left = right - v.getWidth();}if (top < 0) {top = 0;bottom = top + v.getHeight();}if (bottom > screenHeight) {bottom = screenHeight;top = bottom - v.getHeight();}v.layout(left, top, right, bottom);lastX = (int) event.getRawX();lastY = (int) event.getRawY();break;case MotionEvent.ACTION_UP:endTime = System.currentTimeMillis();//当从点击到弹起小于半秒的时候,则判断为点击,如果超过则不响应点击事件if ((endTime - startTime) > 0.1 * 1000L) {isclick = true;} else {isclick = false;}System.out.println("执行顺序up");break;}return isclick;}}
3 0
- Android ontouch 拖动与点击事件冲突解决方式
- Android onTouch事件与ScrollView冲突
- android webview setBuiltInZoomControls 与 onTouch 冲突解决
- android webview setBuiltInZoomControls 与 onTouch 冲突解决
- 解决Android ScrollView子视图的onTouch事件冲突
- 解决UITapGestureRecognizer 与 UITableView 点击事件冲突
- 解决手势与tableview点击事件冲突:
- android onclick与ontouch和scroll监听冲突的解决方法 类似QQHD拖动窗口效果
- Android:ListView的点击事件与子控件点击冲突的解决
- 解决子控件的onTouch事件与父控件ScrollView的冲突
- Android onTouch 点击事件执行两次分析
- Android onTouch 点击事件执行两次分析
- android onTouch与onClick冲突解决方法
- Android解决百度map与scrollview拖动冲突
- 如何解决ViewFlipper的onClick和onTouch的冲突事件
- onTouch 事件与onClick事件发生冲突,如何在onTouch事件中实现点击事件
- OnTouch点击事件
- tableView的点击事件或textfield 与手势冲突解决
- informix系统表
- Juicer 使用范例
- C++动态库(Dll)的制作,导出类
- vs2010 启动失败
- java注解
- Android ontouch 拖动与点击事件冲突解决方式
- 用Erlang开发的九大开源项目汇总及介绍
- netstat
- 最大公约数的简单算法
- Android平台的 Ptrace, 注入, Hook 全攻略
- C primer plus 第十章 练习6:
- Top K 算法详解(哈希表Hash的使用)
- android 蓝牙4.0多通道
- vimgrep的用法