Сенсорные события после перемещения на несколько единиц

Я пытаюсь создать событие касания, которое не будет активировано, пока палец не переместится на несколько единиц от исходного положения.

До сих пор я настроил свой метод onTouch следующим образом:

private XYEvents xyEvent =  new XYEvents();

public boolean motionTracker(MotionEvent event, int n)
{
    int note = n;   

    switch(event.getAction())
    {
    case MotionEvent.ACTION_DOWN:
            xyEvent.setInitial(event);
            playNote(note);

        break; 


    case MotionEvent.ACTION_MOVE:
        byte data1;
        byte data2;

//I figured I should input a condition to check if the finger has moved a few units before it should start doing stuff like so:

            if (xyEvent.getXThreshold(event))
            {
                int xMod = xyEvent.eventActions(event)[0];

                data1 = (byte) (xMod & 0x7f);
                data2 = (byte) ((xMod & 0x7f00) >> 8);
                xModulation((int)data1, (int)data2); 
            }


        break;
     }

С этим методом у меня проблемы:

private float initialX, initialY;
private int xValue; 

boolean getXThreshold(MotionEvent event)
{
    float deltaX = event.getX();
    float threshold = 10;

    float condition = (deltaX - initialX);

    if(condition <= threshold || condition >= -threshold )
        return false;
    else 
        return true;
}

метод getXThreshold, похоже, делает то, что должен, в другом методе, который выглядит так:

public int[] eventActions(MotionEvent event)
{   
    int value = xValue;

    int xNull = 8192;


    if(!getXThreshold(event))
        xValue = xNull;


    if(getXThreshold(event))
        xValue = xHandleMove(event, true);


    return value;


}

Какие-либо предложения?

/M


person hacke    schedule 14.12.2012    source источник


Ответы (1)


Кажется, этот аргумент:

if(condition <= threshold || condition >= -threshold )
    return false;
else 
    return true;

Нужно было перевернуть, иначе по какой-то причине он всегда возвращал false.

Теперь это выглядит так и прекрасно работает.

boolean getXThreshold(MotionEvent event)
{
    float deltaX = event.getX();
    float threshold = 10;

    float condition = (deltaX - initialX);

    return condition >= threshold || condition <= -threshold;
}

Желаю хорошей недели! /м

person hacke    schedule 16.12.2012