2015-08-05 2 views
-2

В настоящее время я обрабатываю движение на Android, и я использовал MotionEvent.ACTION_MOVE.найти правильное направление при перемещении пальца в устройствах Android.

Я вычислил currentx =(int) event.getX()/size и currenty=event.gety()/size, что дает мне целочисленную базу по размеру сетки, над которой я работаю. Howveor, я хочу, чтобы найти, где текущий y изменен во время движения и решил что-то сделать после этого.

Например, если размер равен 10 затем в x=150 и y=150 мой currentx бы 15 и и currenty бы 15 но когда currenty изменено на что-то вроде 16 что означает 150<event.get(y)<160. Я хочу знать, что я нахожусь внизу и так далее.

+0

Просьба предоставить нам рабочий образец вашего кода. На данный момент ваш вопрос слишком расплывчато, чтобы его можно было ответить – Aserre

+0

Я скопировал здесь пример кода, потому что приведенное выше описание было недостаточно ясным. –

ответ

0
public boolean onTouchEvent(MotionEvent event) { 
//mGestureDetector.onTouchEvent(event); 

int action = event.getActionMasked(); 

switch (action) { 

    case MotionEvent.ACTION_DOWN: 
     initialX = event.getX(); 
     initialY = event.getY(); 

     Log.d(TAG, "Action was DOWN"); 
     break; 

    case MotionEvent.ACTION_MOVE: 
     Log.d(TAG, "Action was MOVE"); 
     break; 

    case MotionEvent.ACTION_UP: 
     float finalX = event.getX(); 
     float finalY = event.getY(); 

     Log.d(TAG, "Action was UP"); 

     if (initialX < finalX) { 
      Log.d(TAG, "Left to Right swipe performed"); 
     } 

     if (initialX > finalX) { 
      Log.d(TAG, "Right to Left swipe performed"); 
     } 

     if (initialY < finalY) { 
      Log.d(TAG, "Up to Down swipe performed"); 
     } 

     if (initialY > finalY) { 
      Log.d(TAG, "Down to Up swipe performed"); 
     } 

     break; 

    case MotionEvent.ACTION_CANCEL: 
     Log.d(TAG,"Action was CANCEL"); 
     break; 

    case MotionEvent.ACTION_OUTSIDE: 
     Log.d(TAG, "Movement occurred outside bounds of current screen element"); 
     break; 
} 

return super.onTouchEvent(event); 
    } 

вот мой код

private int getDirection(float startx, float starty,float endx ,float endy) 
{ 

int direction=-1; 

    startx = (((int) startx/_size) *_size) ; 
    starty = (((int) starty/_size) * _size) ; 
    endx = (((int) endx/_size) * _size) ; 
    endy = (((int) endy/_size) * _size) ; 


    // Log.i("direction","startx:"+startx+"endx:"+endx+"starty: "+starty+"endy: "+endy+" "); 


    if (starty==endy) 
    { 
     direction= 0; 

     return direction; 

    } 
    if(startx==endx) 
    { 
     direction =1; 
     return direction; 
    } 

    if(Math.abs(startx-endx)==Math.abs(starty-endy)) 
    { 

     direction =2; 
     return direction; 



    } 



    else 
    { 
     direction =-1; 
    return direction; 
    } 





} 

так что я могу найти я нахожусь в horizantal или вертикальных или Безоперационном эти 2 cordinates, но я нужен способ, чтобы сравнить предыдущие и текущую ориентацию, в то время как в action.move что-то вроде onDirectionChanggeListener Я могу использовать action_up, но мне нужно это во время действия перемещения.

Смежные вопросы