我使用DrawRect方法绘制室内地图。我想通过用户的OnTouch事件来识别每个矩形。我怎么能实现呢?
我想知道我是否可以将绘制的矩形用作独立的对象,我可以在其中唯一地识别它们。
已更新
我试过这个。但它给了我错误。如何用for循环创建一个新的意图? :(
ArrayList<Rect> rectangles = new ArrayList<Rect>();
{rectangles.add(new Rect(232,78,419,238));
rectangles.add(new Rect(285,27,524,239));
rectangles.add(new Rect(418,79,524,239));
rectangles.add(new Rect(181,79,233,215));
rectangles.add(new Rect(232,237,524,315));}
String Selected_rect = null;
public boolean onTouchEvent(MotionEvent event) {
int touchX = (int) event.getX();
int touchY = (int) event.getY();
switch(event.getAction()){
case MotionEvent.ACTION_DOWN:
System.out.println("Touching down!");
for(int i =0; i< rectangles.size();i++){
if(rectangles.get(i).contains(touchX,touchY)){
System.out.println("Touched Rectangle, start activity.");
rectangles.get(i).describeContents ();
Selected_rect = String.valueOf(rectangles.get(i));
}
// Intent inte = new Intent("android.intent.action.DetectBlock");
// startActivity(inte);
}
break;
case MotionEvent.ACTION_UP:
System.out.println("Touching up!");
break;
case MotionEvent.ACTION_MOVE:
System.out.println("Sliding your finger around on the screen.");
break;
}
return true;
}
我的意图方法正文
private void startActivity(Intent inte) {
// TODO Auto-generated method stub
startActivity(inte);
}
答案 0 :(得分:1)
画布将不记得您在其上绘制的形状。你必须分开跟踪它们。您应该使用Rect对象(“模型”对象)或其他自定义对象填充列表(或其他一些数据结构),其中包含矩形的坐标,尺寸和任何需要,并检查触摸的坐标是否触摸在任何这些矩形内。例如。 Android的Rect方法contains(int x, int y)
会有所帮助。在你的绘制方法中,你也可以使用这些对象。
答案 1 :(得分:0)
我意识到这个问题有一段时间被问到,但我注意到你的更新问题......
我猜你的问题实际上是你试图从View类运行“startActivity”。
首先,如果您在活动类上创建一个新的静态void
public static void Rectclicked(Context c) {
Intent inte = new Intent(c, SecondActivity.class);
c.startActivity(inte);
}
然后返回你的View类,在TouchEvent中,如果点击了一个矩形,则将其添加到for循环中
MainActivity.Rectclicked(getContext());
答案 2 :(得分:0)
我不确定这是否已得到解答,但我正在构建类似的东西。对于rects的构造,我只是手动添加每个,然后使用Rect.intersect()来查看构造的rects是否越过接触点。这是一个模糊的答案,但我认为你想出来了,如果你没有,请告诉我:D