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()などは最初から呼び出されていません。

4

2 に答える 2

0

break;switchステートメントでは、各ケースの最後に aを付ける必要があります。

switch(event.getAction()){

    case MotionEvent.ACTION_DOWN: {
        Log.i("msg", "in MotionEvent.ACTION_DOWN "+event.getX());
        downX = event.getX();
        downY = event.getY();
        break;
        }
    case...
于 2013-02-27T19:51:47.037 に答える
0

「returntrue;」という行を追加します。MotionEvent.ACTION_DOWNで問題が解決した場合。

于 2013-02-27T21:31:26.437 に答える