【问题标题】:Detecting ACTION_UP after moving finger移动手指后检测 ACTION_UP
【发布时间】:2015-03-05 10:55:04
【问题描述】:

尝试使图像预览功能正常工作,将手指放在缩略图上会显示完整图像。松开手指将使整个图像消失。

这很容易实现,但是如果用户在释放之前将手指从 ImageView 上移开,则 ACTION_UP 不会触发。

@Override
public boolean onTouch(View v, MotionEvent e)
{
    if (v.getId() == R.id.gallery_iv_pose_thumb)
    {
        // This works fine
        if (e.getAction() == MotionEvent.ACTION_DOWN)
        {
                preview.setImageBitmap(galleryAdapter.getGalleryItemFromChildView(v).getImage());
                preview.setVisibility(View.VISIBLE);
                return true;
        }
        // This only fires if a finger is released over the initial view
        else if (e.getAction() == MotionEvent.ACTION_UP)
        {
            preview.setVisibility(View.INVISIBLE);
            return true;
        }
    }

我试图简单地监听整个布局的 ACTION_UP 事件,但这需要处理布局的 ACTION_DOWN ......这阻止了我监听缩略图的 ACTION_DOWN 事件。

任何帮助将不胜感激!

【问题讨论】:

  • 如果您将手指释放到捕获事件的视图之外,ACTION_UP 将不会触发
  • 触摸取消时处理。
  • 谢谢@mr.icetea 我知道这一点,但我想知道是否存在一种解决方案,能够检测手指何时从视图中抬起而触发原始 ACTION_DOWN (见标题) .

标签: java android


【解决方案1】:

如果您移出边界,将调用 ACTION_CANCEL。

所以这应该有效:

else if (e.getAction() == MotionEvent.ACTION_UP || e.getAction() == MotionEvent.ACTION_CANCEL)

【讨论】:

  • 问题是,当用户将手指从屏幕上移开时,我希望预览图像消失(无论它是否悬停在视图上)......而使用此代码,只要手指离开视图,它就会消失。
  • @Naxin 然后在根视图上设置触摸监听器。要定位您的整个活动,您可以使用findViewById(android.R.id.content)
  • 我已经在我的帖子中考虑过这个解决方案。正如我所说,“这也需要处理布局的 ACTION_DOWN ......这阻止了我监听缩略图的 ACTION_DOWN 事件”。除非有解决方案可以在单个 onTouchEvent 中处理多个视图的 ACTION_DOWN 事件??
  • @Naxin 是的。检查view 是否是您的视图,然后执行其他操作调用超级方法:super.onTouch(view, e)
  • 因为我已经将片段实现为 View.OnTouchListener... onTouch 没有超级方法。我应该在另一个上下文中调用它吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
相关资源
最近更新 更多