我有一个非常大的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上调用。
答案 0 :(得分:0)
您可以尝试将视图的所有位置预先计算到数组中,然后对行(y)和列(x)使用二进制搜索,如果子项的大小是不变的,它将起作用。