我正在绘制一个包含六边形的地图,因为它的节点我创建了一个NodeView类,以便在调用时在Canvas上绘制图像。 (你可以看到this image看六边形布局) 每个节点都有自己的NodeView(因为每个节点都有其他属性)
我想要做的是触摸六边形时(在ActionUp上)它会将其图像重绘为不同的六边形图像
到目前为止,这就是我所拥有的
public boolean onTouchEvent(MotionEvent event) {
int eventaction = event.getAction();
switch (eventaction) {
case MotionEvent.ACTION_DOWN:
// finger touches the screen
break;
case MotionEvent.ACTION_MOVE:
// finger moves on the screen
break;
case MotionEvent.ACTION_UP:
// finger leaves the screen
Toast toast = Toast.makeText(getContext(), "Button is pressed", 1);
toast.show();
//should change the image drawn on this view ONLY
break;
}
return true;
}
我应该如何使用ACTION_UP使触摸的六边形仅改变它的图像?
目前使用NodeView时,它使用onDraw()方法绘制六边形,具体取决于应该绘制的六边形(我有几个用于不同的地形)。
答案 0 :(得分:0)
您必须在DOWN事件中计算用户手指位置:
case MotionEvent.ACTION_DOWN:
mInitialPosY = event.getX();
mInitialPosY = event.getY();
break;
然后你需要有六边形或节点的矩形,你可以向下/向上迭代以查看用户是否正在触摸它。
private final int isUserTouchingNode(int x, int y)
{
//Loop through rects of nodes
int nodeBeingTouched;
Rect node; //Rect of you node
for (int i = 0; i < nodes.length; i++)
{
node = nodes[i];
if (node.contains(x, y))
{
return i;
}
}
}
然后在您的绘图方法中,您可以看到正在触摸哪一个并以不同方式绘制它,当用户按下屏幕时,用户当前正在触摸的视图会自动失效。
您也可以使用MOVE和UP执行操作,因此请查看用户是否已启动/移出视图。
一个例子是:
@Override
public boolean onTouchEvent(final MotionEvent event)
{
final int action = event.getAction();
mCurrentPosX = event.getX();
mCurrentPosY = event.getY();
switch (action)
{
case MotionEvent.ACTION_DOWN:
mInitialPosY = event.getX();
mInitialPosY = event.getY();
mStartingNode = isUserTouchingNode(mInitialPosX, mInitialPosY);
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
mEndingNode = isUserTouchingNode(mCurrentPosX, mCurrentPosY);
if(mStartingNode == mEndingNode){
doNodePressed(mEndingNode);//etc...
}
break;
}
return super.onTouchEvent(event);
}
这绝不是一个完整的工作样本,只是一个让你入门的想法。