2013-02-27 5 views
1

Может кто-нибудь помочь мне с кодом ниже. Я использую этот код для обнаружения пальца на экране.вопрос с кодом обнаружения салфетки экрана

import android.app.Activity; 
import android.content.Intent; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 

public class ActivitySwipeDetector implements View.OnTouchListener { 

private Activity activity; 
static final int MIN_DISTANCE = 100; 
private float downX, downY, upX, upY; 

public ActivitySwipeDetector(final Activity activity) { 
    this.activity = activity; 
} 

public void onRightToLeftSwipe() { 
} 

public void onLeftToRightSwipe(){ 
} 

public void onTopToBottomSwipe(){ 
} 

public void onBottomToTopSwipe(){ 
} 

public boolean onTouch(View v, MotionEvent event) { 
switch(event.getAction()){ 
case MotionEvent.ACTION_DOWN: { 
Log.i("msg", "in MotionEvent.ACTION_DOWN "+event.getX()); 
downX = event.getX(); 
downY = event.getY(); 
} 
case MotionEvent.ACTION_UP: { 
Log.i("msg", "in MotionEvent.ACTION_UP "+event.getX()); 
upX = event.getX(); 
upY = event.getY(); 

float deltaX = downX - upX; 
float deltaY = downY - upY; 

// swipe horizontal? 
    if(Math.abs(deltaX) > MIN_DISTANCE){ 
    // left or right 
    if(deltaX < 0) { this.onLeftToRightSwipe(); return true; } 
    if(deltaX > 0) { this.onRightToLeftSwipe(); return true; } 
} else { Log.i("msg", "X-axis Swipe was only " + downX+"-"+upX + " long, need at least " +  
    MIN_DISTANCE); } 

// swipe vertical? 
if(Math.abs(deltaY) > MIN_DISTANCE){ 
    // top or down 
    if(deltaY < 0) { this.onTopToBottomSwipe(); return true; } 
    if(deltaY > 0) { this.onBottomToTopSwipe(); return true; } 
} else { Log.i("msg", "Y-axis Swipe was only " + downY+"-"+upY + " long, need at least " + 
MIN_DISTANCE); } 

//  return true; 
} 
} 
return false; 
} 

} 

и это, как я использую этот класс в своем коде

myTextView.setOnTouchListener(new ActivitySwipeDetector(this) { 
     public void onRightToLeftSwipe() { 
      //do some stuff; 
     } 
     public void onLeftToRightSwipe() { 
      //do some stuff; 
     } 
     public void onTopToBottomSwipe() { 
      //do some stuff; 
     } 
     public void onBottomToTopSwipe() { 
      //do some stuff; 
     } 
    }); 

Когда я проверить этот код (прямо на телефоне, а не на эмуляторе) и переменные UPX объявления downX возвращаются одинаковые значения , То же самое происходит с значениями upY и downY. И, следовательно, метод onLeftToRightSwipe() и т. Д. Не вызывается в первую очередь.

ответ

0

Добавление строки "return true;" в случае, если MotionEvent.ACTION_DOWN решил проблему.

0

В вашем заявлении о переключении вам нужно положить break; в конце каждого случая.

switch(event.getAction()){ 

    case MotionEvent.ACTION_DOWN: { 
     Log.i("msg", "in MotionEvent.ACTION_DOWN "+event.getX()); 
     downX = event.getX(); 
     downY = event.getY(); 
     break; 
     } 
    case... 
+0

, но затем он выходит из MotionEvent.ACTION_DOWN после касания. поэтому выполнение не переходит к случаю MotionEvent.ACTION_UP. Он должен фиксировать начальную позицию в downX и закрытие записи в upX. Положив перерыв, только downX получает polupated. – user1938357

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