2016-12-21 15 views
1

나는 안드로이드 장치의 모서리 또는 가장자리에서 스 와이프를들을 수 있도록 스 와이프 리스너를 구현해야합니다. edge 메소드를 구현하기 위해 onTouchEvent (MotionEvent 이벤트)를 구현했습니다. 그러나 edge 플래그의 값은 항상 0으로 설정됩니다. 내 질문은 장치의 모서리 또는 가장자리에서 가져온 스 와이프를 듣는 방법입니다.안드로이드 폰의 모서리와 가장자리에서 스 와이프

미리 감사드립니다.

@Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN 
      && (event.getEdgeFlags() == MotionEvent.EDGE_RIGHT) || event.getEdgeFlags() == MotionEvent.EDGE_LEFT) { 
      mOverlayLayout.setVisibility(View.VISIBLE); 
      return true; 
     } else if (event.getFlags() == MotionEvent.FLAG_WINDOW_IS_OBSCURED) { 
      mOverlayLayout.setVisibility(View.INVISIBLE); 
      return true; 
     } 
     return false; 
    } 

답변

0

당신은 OnSwipeTouchListener.java를 만들 수 있습니다

import android.view.GestureDetector; 
     import android.view.GestureDetector.SimpleOnGestureListener; 
     import android.view.MotionEvent; 
     import android.view.View; 
     import android.view.View.OnTouchListener; 

    public class OnSwipeTouchListener implements OnTouchListener { 

    private final GestureDetector gestureDetector; 

    public OnSwipeTouchListener (Context ctx){ 
     gestureDetector = new GestureDetector(ctx, new GestureListener()); 
    } 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     return gestureDetector.onTouchEvent(event); 
    } 

    private final class GestureListener extends SimpleOnGestureListener { 

     private static final int SWIPE_THRESHOLD = 100; 
     private static final int SWIPE_VELOCITY_THRESHOLD = 100; 

     @Override 
     public boolean onDown(MotionEvent e) { 
      return true; 
     } 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
      boolean result = false; 
      try { 
       float diffY = e2.getY() - e1.getY(); 
       float diffX = e2.getX() - e1.getX(); 
       if (Math.abs(diffX) > Math.abs(diffY)) { 
        if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { 
         if (diffX > 0) { 
          onSwipeRight(); 
         } else { 
          onSwipeLeft(); 
         } 
        } 
        result = true; 
       } 
       else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) { 
         if (diffY > 0) { 
          onSwipeBottom(); 
         } else { 
          onSwipeTop(); 
         } 
        } 
        result = true; 

      } catch (Exception exception) { 
       exception.printStackTrace(); 
      } 
      return result; 
     } 
    } 

    public void onSwipeRight() { 
    } 

    public void onSwipeLeft() { 
    } 

    public void onSwipeTop() { 
    } 

    public void onSwipeBottom() { 
    } 
} 

사용법 :

imageView.setOnTouchListener(new OnSwipeTouchListener(MyActivity.this) { 
public void onSwipeTop() { 
    Toast.makeText(MyActivity.this, "top", Toast.LENGTH_SHORT).show(); 
} 
public void onSwipeRight() { 
    Toast.makeText(MyActivity.this, "right", Toast.LENGTH_SHORT).show(); 
} 
public void onSwipeLeft() { 
    Toast.makeText(MyActivity.this, "left", Toast.LENGTH_SHORT).show(); 
} 
public void onSwipeBottom() { 
    Toast.makeText(MyActivity.this, "bottom", Toast.LENGTH_SHORT).show(); 
} 

});

참조 :이를 이용하여 https://stackoverflow.com/a/12938787/7199177

+0

, 전체 화면이 응답한다. 하지만, 응용 프로그램 EasySwipe, Lazyswipe 등에서처럼 화면의 모퉁이에서만 스 와이프를 감지해야합니다. –

+0

괜찮아요, 괜찮아요, 나쁘지 만, 가장자리 마스크 – Odysseus

+0

괜찮아요, 괜찮아요, 좋지 않아요, 안좋아, 가장자리 마스크, 응, onInterceptTouchEvent MotionEvent 이벤트) * – Odysseus