2

我目前正在绘制一个包含六边形的地图,因为它是节点,我做了一个NodeView类,在调用时在画布上绘制图像。 (你可以看到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

你不得不在DOWN事件计算用户手指的位置:

case MotionEvent.ACTION_DOWN: 
    mInitialPosY = event.getX(); 
    mInitialPosY = event.getY(); 
    break; 

然后,你需要有你的六边形或节点的Rects,你可以下来遍历/最多见,如果用户触摸它。

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); 
} 

这绝不是一个完整的工作示例只是一个想法,让你开始。