2014-01-18 29 views
0

我已经在arraylist中存储了几个路径对象。我尝试根据触摸的坐标x,y选择正确的路径对象,然后在画布周围移动路径对象。选择正确的路径对象并将其移动

我现在可以选择用户的触摸坐标。 Android的路径会移除contains方法,因此我不能使用.contains(x,y)来确定正确的路径对象并将其移动。

此外,由于我的路径对象不只是矩形对象,我也无法使用.computebounds。

这是我onTouch方法:在挑选含屏幕触摸的X和Y从ArrayList中的路径

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    // TODO Auto-generated method stub 
     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      // screen touch get x of the touch event 
      x = event.getX(); 
      // screen touch get y of the touch event 
      y = event.getY(); 

      break; 

     } 

     invalidate(); 

    return true; 
} 

现在我面临的问题。我知道的唯一方法是.contains(x,y)在这种情况下不起作用。

+0

向我们展示一些代码。你试过什么了? –

+0

@Robin Dijkhof我已添加我的代码。 – pancakeleh

回答

0

我会用保存在一个ArrayList中

@Override 
public boolean onTouchEvent(MotionEvent event) { 
// TODO Auto-generated method stub 
    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     // screen touch point of the touch event 
     myPointArrayList.add(event.getX(), event.getY()); 



     break; 

    } 

    invalidate(); 

return true; 
} 

点您可以通过列表循环检查位置。

for(int i = 0; i<myPointArrayList.size(); i++){ 
    if(myPointArrayList.get(i).getX() == myIntX && myPointArrayList.get(i).getY() == myIntY){ 
     doSomething(); 
    } 
} 

不幸的是,Android的点类不包含getX。这意味着我们需要创建自己的点类。

public class MyPoint{ 
    private float x; 
    private float y; 

    public MyPoint(float x, float y){ 
     this.x = x; 
     this.y = y; 
    } 

    public float getX(){ 
     return x; 
    } 
    public float getY(){ 
     return y; 
    } 
} 

也可以创建一个新点并进行比较。

for(int i = 0; i<myPointArrayList.size(); i++){ 
    if(myPointArrayList.get(i).equals(new PointF(myIntX, myIntY)){ 
     doSomething(); 
    } 
} 

我会去第二个选项,因为它节省了一些时间。

+0

我试过了,但是我得到了这个错误“方法getX()未定义类型ArrayList ” – pancakeleh

+0

请参阅编辑。 –