Android中处理OnClick和OnTouch方法冲突的解决方案
目前想到的最好的解决方法,大家有更好的欢迎告知。
问题:在一个view中有一个按钮,要求可以通过点按移动这个按钮,同时单纯的点击而不移动这个按钮的话可以跳转到新的Activity。
遇到的困难:按钮的移动好实现,通过OnTouch的MotionEvent.ACTION_DOWN、MotionEvent.ACTION_MOVE以及MotionEvent.ACTION_UP可以实现,但是如果同时实现OnTouch和OnClick方法,会导致冲突。关于这方面的理论网上回答的很好,下面我写出我的解决方法。
按钮移动示例代码如下(转自网友):
public boolean onTouch(View v, MotionEvent event) {
int action=event.getAction();
Log.i("@@@@@@", "Touch:"+action);
switch(action){
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getRawX();
lastY = (int) event.getRawY();
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:
int dx = (int)event.getRawX() - lastX;
int dy = (int)event.getRawY() - lastY;
move(v, dx, dy);
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
private void move(View v, int dx, int dy){
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);
Log.i("@@@@@@", "position��" + left + ", " + top + ", " + right + ", " + bottom);
}
解决问题的核心方法是:
不要为这个按钮提供OnClick的方法,也就是不添加OnClickListener,OnClick的方法调用在OnTouch方法中实现。
具体描述:
添加一个boolean的全局变量初始化为false(表示按钮不移动),一旦触发了OnTouch中的MotionEvent.ACTION_MOVE,那么就表示按钮发生了移动,不触发点击动作,待触发了MotionEvent.ACTION_UP,就不发生动作并且把这个全局变量变为初始化的false;反之,如果没有移动,那么就触发点击动作。
Android中处理OnClick和OnTouch方法冲突的解决方案的更多相关文章
- Android 中 DrawerLayout + ViewPager 怎么解决滑动冲突?
DrawerLayout 是 Android 官方的侧滑菜单控件,而 ViewPager 相信大家都很熟悉了.今天这里就讲一下当在 DrawerLayout 中嵌套 ViewPager 时,要如何解决 ...
- android中获取root权限的方法以及原理(转)
一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. 二. Root 的介绍 1. Root 的目的 可以让我们拥有 ...
- Android中集成第三方库的方法和问题
Android中集成第三方库的方法和问题 声明: 1. 本文參考了网上同学们的现有成果,在此表示感谢,參考资料在文后有链接. 2. 本文的重点在第三部分,是在开发中遇到的问题及解决的方法.第一,第二部 ...
- Android中获取文件路径的方法总结及对照
最近在写文件存贮,Android中获取文件路径的方法比较多,所以自己也很混乱.找了好几篇博客,发现了以下的路径归纳,记录一下,以备不时之需 Environment.getDataDirectory() ...
- Android使用gradle依赖管理、依赖冲突终极解决方案(转)
Android使用gradle依赖管理.依赖冲突终极解决方案在Android开发中,相信遇到关于版本依赖的问题的同学有不少.虽然Android Studio一般都会自动帮我们去重,但是有时候去重失败了 ...
- iOS 开发中,关于xxx.xcodeproj 文件冲突的解决方案 (以后谁不会了,直接将连接给他)
iOS 开发中,关于xxx.xcodeproj 文件冲突的解决方案 (一有冲突要手把手教一遍,太麻烦了,现在总结下,以后谁不会了,连接直接发他). 关于xxx.xcodeproj 文件冲突的话,是比较 ...
- Android中各种Adapter的使用方法
1.概念 Adapter是连接后端数据和前端显示的适配器接口.是数据和UI(View)之间一个重要的纽带.在常见的View(ListView,GridView)等地方都须要用到Adapter.例如以下 ...
- Android中的跨进程通信方法实例及特点分析(二):ContentProvider
1.ContentProvider简单介绍 在Android中有些数据(如通讯录.音频.视频文件等)是要供非常多应用程序使用的.为了更好地对外提供数据.Android系统给我们提供了Content P ...
- Android中的跨进程通信方法实例及特点分析(一):AIDL Service
转载请注明出处:http://blog.csdn.net/bettarwang/article/details/40947481 近期有一个需求就是往程序中增加大数据的採集点,可是由于我们的Andro ...
随机推荐
- Dev WPF使用总结
1.换肤 ThemeManager.ApplicationThemeName = Theme.DXStyle.Name this.UpdateLayout(); //重新布局
- 手机版 div拖动
<!doctype html> <html> <head> <title></title> <script type="te ...
- 使用NPOI2.1.3.1版本导出word附带表格和图片
原文:http://www.cnblogs.com/afutureBoss/p/4074397.html?utm_source=tuicool&utm_medium=referral 最近项目 ...
- Tomcat中间件URL中文字符传递问题
1. 问题描述: tomcat中如果URL中需要传递中文参数,需要配置tomcat的service.xml中文传递的编码方式,否则中文传递将出现乱码,导致程序异常. 2. 解决方式: 修改tomcat ...
- 轻型的ORM类Dapper
Dapper是一个轻型的ORM类.代码就一个SqlMapper.cs文件,主要是IDbConnection的扩展方法,编译后就40K的一个很小的dll.官方站点http://code.google.c ...
- Android部分调试开关
开启 GPU Render 的profiling bar: adb shell setprop debug.hwui.profile visual_bars #或visual_lines adb sh ...
- Js制作的文字游戏
自己制作的文字游戏.(: <!DOCTYPE html><html lang="en"><head> <meta charset=& ...
- h5整理--详解css的相对定位和绝对定位
浏览器默认状态下position的属性默认值是static也就是没有定位,元素出现在正常的文档流中,这个时候给元素设置的left,right.bottom.top这些偏移属性是没有效果的,不会生效: ...
- mysql-5.7.14 源码安装笔记
安装编译 下载源码 mysql-5.7.14.tar.gz 解压定义安装变量 cd /usr/local/src mysql_version="mysql-5.7.14" tar ...
- WNDR3700V4 安装SVN Server
下文所用路由器型号为:WNDR3700V4 参考链接:http://dd-wrt.ca/phpBB2/viewtopic.php?t=86912&highlight=optware http: ...