我在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中选择包含屏幕触摸x和y的路径的问题。我所知道的唯一方法是.contains(x,y)在这种情况下不起作用。
答案 0 :(得分: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();
}
}
我会选择第二种选择,因为它可以节省一些时间。