GVKun编程网logo

android-event.getAction()==当setOnTouchListener返回false时,MotionEvent.ACTION_DOWN不为true

9

在本文中,您将会了解到关于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-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如何注册

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

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

Android ListView onTouchEvent并不总是提供ACTION_DOWN

我的问题是,当我尝试在ListView中拖动一个项目时,我并不总是得到ACTION_DOWN事件.我有很多ACTION_MOVE事件,只有一个ACTION_UP事件.
情况并非总是如此.我有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

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等相关内容,可以在本站寻找。

本文标签: