在本文中,您将会了解到关于android-event.getAction()==当setOnTouchListener返回false时,MotionEvent.ACTION_DOWN不为true的新资
在本文中,您将会了解到关于android-event.getAction()==当setOnTouchListener返回false时,MotionEvent.ACTION_DOWN不为true的新资讯,并给出一些关于Android Intent.ACTION_SCREEN_OFF和Intent.ACTION_USER_PRESENT如何注册、Android ListView onTouchEvent不提供ACTION_DOWN、Android ListView onTouchEvent并不总是提供ACTION_DOWN、Android MotionEvent.getActionIndex()和MultiTouch的实用技巧。
本文目录一览:- android-event.getAction()==当setOnTouchListener返回false时,MotionEvent.ACTION_DOWN不为true
- Android Intent.ACTION_SCREEN_OFF和Intent.ACTION_USER_PRESENT如何注册
- Android ListView onTouchEvent不提供ACTION_DOWN
- Android ListView onTouchEvent并不总是提供ACTION_DOWN
- Android MotionEvent.getActionIndex()和MultiTouch
android-event.getAction()==当setOnTouchListener返回false时,MotionEvent.ACTION_DOWN不为true
我需要实现onItemLongPressListener和onTouchListener.它们不能一起使用,因此我必须从其他的ontouch列表器中返回false,以使项目长按监听器也被触发.
当我触摸imageButton时,我需要更改图像按钮,但是由于我的触摸监听器返回false,因此图像保持按下状态.
当我不再触摸按钮时,如何更改按钮图像?
imageView.setonTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
imageView.setimageResource(mThumbIdspressed[position]);
} else {
imageView.setimageResource(mThumbIds[position]);
}
recordAudio.startPlaying(position);
return false;
}
});
解决方法:
您可以使用GestureDetector(例如SimpleOnGestureListener)进行区分:
> onDown()
,类似于ACTION_DOWN
> onSingleTapConfirmed()
或onSingleTapUp(),类似于ACTION_UP
> onLongPress()
您的长按活动
Android Intent.ACTION_SCREEN_OFF和Intent.ACTION_USER_PRESENT如何注册
Activity has leaked IntentReceiver ScreenReceiver that was originally registered here. Are you missing a call to unregisterReceiver()?
在我的主要活动中
// Register receiver that handles screen on and screen off logic
final IntentFilter intentScreenfilter = new IntentFilter(Intent.ACTION_SCREEN_ON);
intentScreenfilter.addAction(Intent.ACTION_SCREEN_OFF);
intentScreenfilter.addAction(Intent.ACTION_USER_PRESENT);
screenReceiver = new ScreenReceiver();
当应用程序关闭时,我收到此消息.
ACTION_SCREEN_OFF
和
ACTION_SCREEN_ON
无法在AndroidManifest中注册,只能以编程方式注册.我能做什么?我不想使用服务,因为如果服务全天运行,这对电池不利.解决办法是什么?如何使用这个接收器?
解决方法:
你不能从android清单文件注册这些接收器.它根本不支持.唯一的方法是长时间运行服务并在服务中注册这些接收器.所以,如果你真的想使用
ACTION_SCREEN_ON
和
ACTION_SCREEN_OFF
然后你必须使用服务
Android ListView onTouchEvent不提供ACTION_DOWN
为了具有列表重新排序功能,我转到了this implementation.
我的问题是,当我尝试在ListView中拖动项目时,没有得到ACTION_DOWN事件.相反,对于单个拖尾运动,我依次获得2个ACTION_MOVE事件(action = 0x00000002)和一个ACTION_UP事件(action = 0x00000001).
我看过类似的问题,但似乎每个人都有相反的问题,仅收到ACTION_DOWN事件.
谁能想到为什么会这样?
谢谢,
约尔
解决方法:
我正在使用相同的代码.
我的问题还在于,某些东西正在占用该事件,但我没有设法找到它的原因……但是我设法使用onInterceptTouchEvent解决了该问题,以便在onTouchEvent上需要的事件上返回true.
问题解决了 :-)
Android ListView onTouchEvent并不总是提供ACTION_DOWN
情况并非总是如此.我有3次ACTION_DOWN.它困惑了我.
我看了类似的问题,但它的答案似乎不适合我的.谁能想到为什么会这样?
谢谢
//list_client -- a listview list_client.setonTouchListener(new View.OnTouchListener() { float f1 = -1,f2 = -1 ; @Override public boolean onTouch(View v,MotionEvent event) { switch(event.getAction()){ case MotionEvent.ACTION_DOWN: f1 = event.getRawY(); break; case MotionEvent.ACTION_MOVE: f2 = event.getRawY(); if(f2 - f1 > 50){ if(View.VISIBLE != rl_search_and_add.getVisbility() && ){ rl_search_and_add.setVisibility(View.VISIBLE); } f1 = f2; }else if (f2 - f1 < -50){ rl_search_and_add.setVisibility(View.GONE); f1 = f2; } break; case MotionEvent.ACTION_UP: f1 = -1; f2 = -1; break; } return false; } });
解决方法
>用户可能会错过列表并且MotionEvent.ACTION_DOWN已由其他组件处理,但是如果用户继续拖动并点击列表视图区域,则会收到MotionEvent.ACTION_MOVE操作.
>另一种可能性是,你必须参加许多活动,并且他们被转移到历史事件,你只收到了最新的活动.您可以使用MotionEvent的所有历史方法来查看它们.
Android MotionEvent.getActionIndex()和MultiTouch
我试图获取MotionEvent.ACTION_MOVE事件发生时的指针ID.
我通过调用event.getActionIndex()来做它,但它总是为第二个,第三个,第四个和第五个手指返回0.
我在galaxy S I9000上使用Gingerbread 2.3.3
这是我的代码
switch (event.getActionMasked()) {
case MotionEvent.ACTION_MOVE: {
Log.d("D"," getActionIndex()="+event.getActionIndex());
};break;
}
这是调试结果
05-02 19:20:08.628: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=1
05-02 19:20:08.781: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=1
05-02 19:20:08.820: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=1
05-02 19:20:08.914: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=1
05-02 19:20:09.070: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=2
05-02 19:20:09.187: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=2
05-02 19:20:09.324: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=2
05-02 19:20:09.460: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=2
05-02 19:20:09.523: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=2
05-02 19:20:09.542: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=2
05-02 19:20:09.679: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=3
05-02 19:20:09.703: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=3
05-02 19:20:09.847: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=3
05-02 19:20:10.117: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=3
05-02 19:20:10.261: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.281: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.304: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.371: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.410: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.433: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.519: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.558: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=4
05-02 19:20:10.613: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=3
05-02 19:20:10.640: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=2
05-02 19:20:10.656: DEBUG/D(4534): getActionIndex()=0 getPointerCount()=1
解决方法:
我正在使用此代码来转储事件,并且它运行良好.
/** Show an event in the LogCat view, for debugging */
private void dumpEvent(MotionEvent event) {
String names[] = { "DOWN" , "UP" , "MOVE" , "CANCEL" , "OUTSIDE" ,
"POINTER_DOWN" , "POINTER_UP" , "7?" , "8?" , "9?" };
StringBuilder sb = new StringBuilder();
int action = event.getAction();
int actionCode = action & MotionEvent.ACTION_MASK;
sb.append("event ACTION_" ).append(names[actionCode]);
if (actionCode == MotionEvent.ACTION_POINTER_DOWN
|| actionCode == MotionEvent.ACTION_POINTER_UP) {
sb.append("(pid " ).append(
action >> MotionEvent.ACTION_POINTER_ID_SHIFT);
sb.append(")" );
}
sb.append("[" );
for (int i = 0; i < event.getPointerCount(); i++) {
sb.append("#" ).append(i);
sb.append("(pid " ).append(event.getPointerId(i));
sb.append(")=" ).append((int) event.getX(i));
sb.append("," ).append((int) event.getY(i));
if (i + 1 < event.getPointerCount())
sb.append(";" );
}
sb.append("]" );
Log.d(TAG, sb.toString());
}
我把它从this ZDNET article下来了,所以我不能相信它.我在Android 3.0上运行,但示例代码最初是为早期版本的Android编写的,所以它也适用于你.
看起来你需要调用getPointerId而不是getActionIndex.
关于android-event.getAction()==当setOnTouchListener返回false时,MotionEvent.ACTION_DOWN不为true的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Android Intent.ACTION_SCREEN_OFF和Intent.ACTION_USER_PRESENT如何注册、Android ListView onTouchEvent不提供ACTION_DOWN、Android ListView onTouchEvent并不总是提供ACTION_DOWN、Android MotionEvent.getActionIndex()和MultiTouch等相关内容,可以在本站寻找。
本文标签: