0

我使用 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;
}

我的 Intent 方法体

private void startActivity(Intent inte) {
    // TODO Auto-generated method stub
     startActivity(inte);
}
4

3 回答 3

1

画布不会记住您在其上绘制的形状。您必须分别跟踪它们。您应该使用 Rect 对象(“模型”对象)或其他包含矩形坐标、尺寸和您需要的任何内容的自定义对象填充列表(或其他一些数据结构),并检查触摸是否触摸的坐标位于这些矩形中的任何一个内。Android Rect 的EG 方法contains(int x, int y)会有所帮助。在您的绘图方法中,您还可以使用这些对象。

于 2012-08-19T12:47:10.077 回答
0

我不确定这是否已得到解答,但我正在构建类似的东西。对于矩形的构造,我刚刚手动添加了每个矩形,然后使用 Rect.intersect() 来查看构造的矩形是否穿过接触点。那是一个模糊的答案,但我想您已经弄清楚了,如果您没有,请告诉我:D

于 2014-11-11T03:27:17.523 回答
0

我意识到这个问题是不久前被问到的,但我注意到你更新的问题......

我猜你遇到的问题实际上是你试图从 View 类运行“startActivity”。

首先,如果您像这样在活动类上创建一个新的静态无效

public static void Rectclicked(Context c) {
        Intent inte = new Intent(c, SecondActivity.class);
        c.startActivity(inte);
    }

然后回到你的 View 类,如果点击了一个矩形,在你的 TouchEvent 中将它添加到 for 循环中

MainActivity.Rectclicked(getContext());
于 2013-01-24T16:10:41.847 回答