我用canvas写了一个View,其中包含许多矩形。我希望这些矩形能够被用作按钮,以打开一个新的activity。我该如何实现?
我用canvas写了一个View,其中包含许多矩形。我希望这些矩形能够被用作按钮,以打开一个新的activity。我该如何实现?
你需要小心处理Suri Sahani的例子,onTouchEvent会在任何被认定为触摸事件的动作上被调用,这意味着按下、释放、移动手势等(Android事件监听器文档)。要正确使用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()
。 - Zach HonTouchEvent()
中,只需捕获x和y值,然后可以使用Rect
类中的contains(int x, int y)
方法。如果contains(x, y)
返回true,则触摸事件发生在矩形内部,然后只需创建意图并启动新活动即可。