Вид на клик должен перерисоваться на холсте - PullRequest
2 голосов
/ 12 марта 2012

В настоящее время я рисую карту, которая содержит шестиугольники, поскольку это узлы. Я создал класс NodeView, чтобы при вызове рисовать изображение на холсте. (Вы можете увидеть это изображение , чтобы увидеть расположение шестиугольника) Каждый узел имеет свой собственный 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 () для рисования шестиугольника в зависимости от того, какой из них должен был быть нарисован (у меня есть несколько для разных ландшафтов).

1 Ответ

0 голосов
/ 05 февраля 2013

Вы должны рассчитать местоположение пальца пользователя на событии ВНИЗ:

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

Это ни в коем случае не полный рабочий пример, просто идея, с которой можно начать.

...