GridLayout - 通过坐标x,y查找子节点

时间:2016-08-17 14:10:33

标签: android touch swipe gesture

我有一个非常大的GridLayout(128x128个单元格)。我需要检测每个子项的滑动。目前我在GridLayout上使用OnTouchListener,并使用此代码检测用户滑过的项目。

@Override
public boolean onTouch(View view, MotionEvent event)
{
    int x = (int) event.getX();
    int y = (int) event.getY();

    int count = glImage.getChildCount();
    for(int i = 0; i < count; i++)
    {
        CircleImageView ivPart = (CircleImageView) glImage.getChildAt(i);

        if(isPointWithin(x, y, ivPart.getLeft(), ivPart.getRight(), ivPart.getTop(), ivPart.getBottom()))
        {
            // some code
        }
    }

    return true;
}

private static boolean isPointWithin(int x, int y, int x1, int x2, int y1, int y2)
{
    return (x <= x2 && x >= x1 && y <= y2 && y >= y1);
}

此代码有效,但速度很慢,因为每次滑动位置更改都会导致迭代循环128 ^ 2次。有没有更好的方法来获取GridLayout中的子位置?

我也尝试过onTouchListener for child,但onTouch()仅在播放时在start-item上调用。

1 个答案:

答案 0 :(得分:0)

您可以尝试将视图的所有位置预先计算到数组中,然后对行(y)和列(x)使用二进制搜索,如果子项的大小是不变的,它将起作用。