2012-08-23 7 views
1

길게 누르기로 스크롤하고 싶기 때문에 사용자는 화면을 놓고 스크롤 할 필요가 없습니다. 스크롤로 안드로이드 길게 누르기

내가 제스처 검출기 구현 한

...

final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() { 
    public void onLongPress(MotionEvent e) { 
     // action 1 
    } 

    public boolean onScroll(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { 
     // action 2 
    }  
} 

public boolean onTouchEvent(MotionEvent event) { 
    return gestureDetector.onTouchEvent(event); 
}  

하지만 지금 행동 한 행동이, 사용자의 화면을 해제하지 않고 화면 ... 어떻게이 작업을 연결할 수를 공개해야?

답변

6

나는 GestureDetector이 당신이 원하는 것을 할 것이라고 생각하지 않습니다. 당신 스스로 그것을해야 할 것 같습니다.

public class ScrollTouchTest extends Activity { 

    private final int LONG_PRESS_TIMEOUT = ViewConfiguration 
      .getLongPressTimeout(); 
    private Handler mHandler = new Handler(); 
    private boolean mIsLongPress = false; 
    private Runnable longPress = new Runnable() { 

     @Override 
     public void run() {   
      if (mIsLongPress) {    
       actionOne(); 
       mIsLongPress = false; 
      } 
     } 

    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.views_scrolltouchtest); 
     findViewById(R.id.scrollView1).setOnTouchListener(
       new OnTouchListener() { 

        @Override 
        public boolean onTouch(View v, MotionEvent event) { 
         final int action = event.getAction(); 
         switch (action) { 
         case MotionEvent.ACTION_DOWN: 
          mIsLongPress = true;        
          mHandler.postDelayed(longPress, LONG_PRESS_TIMEOUT); 
          break; 
         case MotionEvent.ACTION_MOVE: 
          actionTwo(event.getX(), event.getY()); 
          break; 
         case MotionEvent.ACTION_CANCEL: 
         case MotionEvent.ACTION_UP: 
          mIsLongPress = false; 
          mHandler.removeCallbacks(longPress); 
          break; 
         } 
         return false; 
        } 
       }); 
    } 

    private void actionOne() { 
     Log.e("XXX", "Long press!!!"); 
    } 

    private void actionTwo(float f, float g) { 
     Log.e("XXX", "Scrolling for X : " + f + " Y : " + g); 
    } 

} 
+0

당신의 onTouch (보기 V, MotionEvent 이벤트) 당신이 원하는 경우에 true를 반환해야합니다 : 나는 아래 두 이벤트 모두 고려 걸릴 것 ScrollView에 묶여 OnToucListener와 클래스, 현재 설정을 모르는 ACTION_MOVE ... 이벤트를 처리하십시오. – ebtokyo

관련 문제