如何创建可点击的矩形?

时间:2012-08-19 12:35:19

标签: android view canvas drawrect ondraw

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

3 个答案:

答案 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