onTouchEvent 有么有(单击,双击,三击)事件?

燚㵘䲜 2010-11-15 04:41:54
Hi~

如题:onTouchEvent 有么有(单击,双击,三击)事件?
在TextView屏幕按触摸中需要触发三种情况。

是否有法子可实现?
...全文
1542 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
changanfounder 2012-10-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 3 楼 cly_apple 的回复:

引用 1 楼 zhq56030207 的回复:

只有单击事件


你好,
请问:单击用哪个方法来获取?

你可以在网上看看相关资料:
onTouchEvent中要处理的最常用的3个事件就是:ACTION_DOWN、ACTION_MOVE、ACTION_UP。

这三个事件标识出了最基本的用户触摸屏幕的操作……
[/Quote]

这是从那个了粘贴过来的吧!如果发生了ACTION_MOVE或者ACTION_UP,那么一定曾经发生了ACTION_DOWN。
这里结论你们测试了没?如果是Gallery空间的话,在它的父View中重载onTouchEvent()函数的话,只发生ACTION_MOVE,并不发生ACTION_DOWN。
xiaokai723 2011-10-25
  • 打赏
  • 举报
回复
int moveType;
int MOVE_V = 2
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
moveType = 0;
break;
case MotionEvent.ACTION_MOVE:
if (event.getHistorySize() > 0) {
float hx = event.getHistoricalX(0);
float hy = event.getHistoricalY(0);
float distanceX = Math.abs(x - hx);
float distanceY = Math.abs(y - hy);

if (Math.max(distanceX, distanceY) > 14) {
moveType = distanceY > distanceX ? MOVE_V : MOVE_H;
} else {
Log.i("ACTION_MOVE", moveType + ",d:" + Math.max(distanceX, distanceY));
}
}

break;
case MotionEvent.ACTION_UP:
if (moveType < MOVE_V) {
long currTime = System.currentTimeMillis();
if (currTime - clickTime < 300) {
Activity activity = (Activity)view.getContext();
Intent intent = new Intent(activity, KingLine.class);
activity.startActivity(intent);
}
clickTime = currTime;
}
break;
}
gjjofsfe 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 killpoer3 的回复:]

只能通过2次点击的间隔时间去判断是否是双击。具体的间隔时间你可以自己设定
[/Quote]

onTouchEvent中只有action_down action_up action_move三种事件,而且都是单击,如果想实现双击 三击,可以设置两次或三次单击事件的时间差来判断是否双击或三击。
killpoer3 2010-11-17
  • 打赏
  • 举报
回复
只能通过2次点击的间隔时间去判断是否是双击。具体的间隔时间你可以自己设定
燚㵘䲜 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 cly_apple 的回复:]

引用 9 楼 ameyume 的回复:

手机中没有双击和三连击之说吧,都当成单击处理了。程序跟踪一下就知道了


虽然没有这种称呼,如果做出来不就有了吗?
触摸屏应该可以实现, 只是找不到方法.

做不出来就只能改设计了.
[/Quote]


按你的思路写了如15楼的代码,最后怎么判断一个单击或双击结束了?
燚㵘䲜 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dinjay 的回复:]

引用楼主 cly_apple 的回复:
Hi~

如题:onTouchEvent 有么有(单击,双击,三击)事件?
在TextView屏幕按触摸中需要触发三种情况。

是否有法子可实现?

双击还说的过去,至少能模拟实现。。。
3击.......
[/Quote]


int up = 0;
int down = 0;
int move = 0;

@Override
public boolean onTouchEvent(MotionEvent event) {

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
down++;
break;
case MotionEvent.ACTION_MOVE:
move++;
break;
case MotionEvent.ACTION_UP:
up++;
break;

default:
break;

}

System.out.println("DOWN:" + down + " MOVE:" + move + " UP:" + up);
if (up == 3 && down == 3 && move == 0) {
up = 0; move = 0; down = 0;
System.out.println("3 Clicked");
}
if (up == 2 && down == 2 && move == 0) {
up = 0; move = 0; down = 0;
System.out.println("2 Clicked");
}

if (up == 1 && down == 1 && move == 0) {
up = 0; move = 0; down = 0;
System.out.println("1 Clicked");
}
if (up == 1 && down == 1 && move > 0) {
up = 0; move = 0; down = 0;
System.out.println("it's moved");
}
System.out.println("");

return super.onTouchEvent(event);
}


试着写了模拟,用那种方式截取一个事件结束了?
燚㵘䲜 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 goodgoogstudy 的回复:]

应该可以通过点击的时间差来判断
[/Quote]

判断的时间用哪个?
downtime or eventtime 还是用其它的哪个?
没找到好法子。
燚㵘䲜 2010-11-17
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 cnbyte 的回复:]

引用 17 楼 killpoer3 的回复:

只能通过2次点击的间隔时间去判断是否是双击。具体的间隔时间你可以自己设定


onTouchEvent中只有action_down action_up action_move三种事件,而且都是单击,如果想实现双击 三击,可以设置两次或三次单击事件的时间差来判断是否双击或三击。
[/Quote]

两次或三次单击事件的时间差怎么判断,我找了找没找到对应的。
goodgoogstudy 2010-11-16
  • 打赏
  • 举报
回复
应该可以通过点击的时间差来判断
sonstar 2010-11-16
  • 打赏
  • 举报
回复
设个变量,做个记数器,单击三次,等于三击
燚㵘䲜 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ameyume 的回复:]

手机中没有双击和三连击之说吧,都当成单击处理了。程序跟踪一下就知道了
[/Quote]

虽然没有这种称呼,如果做出来不就有了吗?
触摸屏应该可以实现, 只是找不到方法.

做不出来就只能改设计了.
燚㵘䲜 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhq56030207 的回复:]

三击没有必要吧..
[/Quote]

因在项目中需要用到 单击,双击,三击 这事件...
ameyume 2010-11-15
  • 打赏
  • 举报
回复
手机中没有双击和三连击之说吧,都当成单击处理了。程序跟踪一下就知道了
Nico 2010-11-15
  • 打赏
  • 举报
回复
没有

一般是实现ontouch。

根据ondown onmove oncancel onup来判断执行各类操作
纠结的木棉花 2010-11-15
  • 打赏
  • 举报
回复
三击没有必要吧..
dinjay 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 cly_apple 的回复:]
Hi~

如题:onTouchEvent 有么有(单击,双击,三击)事件?
在TextView屏幕按触摸中需要触发三种情况。

是否有法子可实现?
[/Quote]
双击还说的过去,至少能模拟实现。。。
3击.......
纠结的木棉花 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cly_apple 的回复:]

引用 1 楼 zhq56030207 的回复:

只有单击事件


你好,
请问:单击用哪个方法来获取?
[/Quote]
你可以在网上看看相关资料:
onTouchEvent中要处理的最常用的3个事件就是:ACTION_DOWN、ACTION_MOVE、ACTION_UP。

这三个事件标识出了最基本的用户触摸屏幕的操作,含义也很清楚。虽然大家天天都在用它们,但是有一点请留意,ACTION_DOWN事件作为起始事件,它的重要性是要超过ACTION_MOVE和ACTION_UP的,如果发生了ACTION_MOVE或者ACTION_UP,那么一定曾经发生了ACTION_DOWN。

从Android的源代码中能看到基于这种不同重要性的理解而实现的一些交互机制,SDK中也有明确的提及,例如在ViewGroup的onInterceptTouchEvent方法中,如果在ACTION_DOWN事件中返回了true,那么后续的事件将直接发给onTouchEvent,而不是继续发给onInterceptTouchEvent。


onTouchEvent是最先捕捉到ACTION_DOWN和ACTION_UP事件的,其次才可能触发onClick或者onLongClick。主要的逻辑在View.java中的onTouchEvent方法中实现的






燚㵘䲜 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bigpretty 的回复:]

单击和双击
[/Quote]

你好,
单击和双击用哪个方法来获取?
燚㵘䲜 2010-11-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhq56030207 的回复:]

只有单击事件
[/Quote]

你好,
请问:单击用哪个方法来获取?
bigpretty 2010-11-15
  • 打赏
  • 举报
回复
单击和双击
加载更多回复(1)

80,490

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧