【发布时间】:2011-08-31 14:06:20
【问题描述】:
我用画布写了一个视图,其中包含许多矩形。我希望将这些矩形用作打开新活动的按钮。我该怎么做?
【问题讨论】:
-
这些答案有帮助吗?
-
感谢大家的帮助。我成功创建了可点击的矩形,但如果矩形很小,则很难点击它(仅在 5-6 次点击尝试后)
-
@LiorZ Hai 你能提供这个的工作代码吗?
标签: android
我用画布写了一个视图,其中包含许多矩形。我希望将这些矩形用作打开新活动的按钮。我该怎么做?
【问题讨论】:
标签: android
您需要小心 Suri Sahani 示例,onTouchEvent 会在任何限定为触摸事件的操作上调用,这意味着按下、释放、移动手势等 (Android Event Listener Documentation)。要正确使用 onTouchEvent,您需要检查 MotionEvent 类型。
List<Rect> retangles;//Assume these have been drawn in your draw method.
@Override
public boolean onTouchEvent(MotionEvent event) {
int touchX = event.getX();
int touchY = event.getY();
switch(event){
case MotionEvent.ACTION_DOWN:
System.out.println("Touching down!");
for(Rect rect : rectangles){
if(rect.contains(touchX,touchY)){
System.out.println("Touched Rectangle, start activity.");
Intent i = new Intent(<your activity info>);
startActivity(i);
}
}
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;
}
【讨论】:
event.getX() 和event.getY() 时会返回float 值,因此您必须将event.getX() 和event.getY() 类型转换为int 用于 int 类型变量。此外,switch 语句中的event 应为event.getAction()。
在您的 onTouchEvent() 中,只需捕获 x 和 y 值,您就可以在 Rect 类中使用 contains(int x, int y) 方法。如果contains(x, y) 返回true,则触摸在矩形内,然后创建意图并启动新活动。
【讨论】: