2014-01-18 2 views
0

Я сохранил несколько объектов пути в arraylist. У меня возникают проблемы с попыткой выбрать правильный объект пути на основе коснутых координат x, y и затем перемещать объект пути вокруг холста.Выбор правильных объектов пути и переместить его

Теперь я могу выбрать контактные координаты пользователя. Путь Android удаляет метод contains, поэтому я не могу использовать .contains (x, y), чтобы определить правильный объект пути и переместить его.

Также, поскольку мои объекты пути - это не только объекты прямоугольника, я также не могу использовать .computebounds.

Это мой onTouch метод:

@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; 
} 

Сейчас я перед проблемой выбора пути, содержащего сенсорного экрана х и у из ArrayList. Единственный метод, который я знаю, который является .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

См. Редактирование, пожалуйста. –

Смежные вопросы