【问题标题】:How to detect view has been touched when dragged over from another view从另一个视图拖过来时如何检测视图已被触摸
【发布时间】:2015-09-07 23:57:33
【问题描述】:

我在这里看到了一个类似的问题:Detect touch event on a view when dragged over from other view。但与我想要的相比,这个问题的行为不同。

如果我有多个视图,我按下一个并继续将手指拖到多个其他视图上,有没有办法通知其他视图它们已被触摸?它不会只是 2 个视图,它可能是多个视图。我单击一个并继续拖动手指并浏览多个其他视图。

视图是动态生成的,并以编程方式添加到 FrameLayout 中,并通过在其周围添加边距以编程方式定位。

【问题讨论】:

    标签: android android-view


    【解决方案1】:

    我找不到通过实际自定义视图执行此操作的方法,因此不得不返回一层。

    视图的位置记录在包含每个视图的 FrameLayout 上。

    在 FrameLayout 中,我最终覆盖了onTouchEvent

    我最终不得不做类似的事情:

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    
        float xCoord = event.getX();
        float yCoord = event.getY();
    
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // Using X and Y coordinates, find out if touch event is on top of a view.
                // Mark the view as touched
                return true;
            case MotionEvent.ACTION_UP:
                // Action required once touch released.
                return true;
            default:
               // When dragging, the default case will be called.
               // Using X and Y coordinates, figure out if finger goes over a view.
               // If you don't want same behaviour when going back to previous view,
               // then mark it so you can ignore it if user goes back to previous view.
    
        }
    }
    

    一旦case MotionEvent.ACTION_UP 被调用,您可以使用视图被标记的事实来了解哪些视图被触摸。如果需要,您还可以通过在标记视图时将视图放入数组中来获取顺序。

    【讨论】:

      猜你喜欢
      • 2011-01-31
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多