2014-03-06 2 views
0

사용자가 손가락을 화면에 올려 놓은 상태에서 위아래로 슬라이드 할 수 있어야하는 사용자 지정 목록 뷰가 있습니다. 어떻게 할 수 있습니까? ontouchEvent thats를 사용자 정의 listview 클래스에 제공했습니다. 나는이 시도했다 .setY (event.getY())하지만 reallt 작업 않습니다. 내가 어떻게 할 수 있니?손가락 위치에서 뷰를 슬라이드하는 방법

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    //System.out.println("First ["+this.getFirstVisiblePosition()+"]"); 

    float y = event.getY(); 


    switch (event.getAction()) { 
     case MotionEvent.ACTION_MOVE: { 

      this.setY(event.getY()); 

      if ((y - startY) > THRESHOLD && STATE_REFRESH_ENABLED && !STATE_REFRESHING && Ref_once) { 
       if(mListener!=null) mListener.onRefresh(); 
       Log.d("CUSTOM LIST"," FOODHOTER LIST LISTENER WORKING"); 
       this.setClickable(false); 
       Ref_once=false; 
      } 
     } 
     break; 
     case MotionEvent.ACTION_DOWN: { 
      startY = y; 
      // STATE_REFRESH_ENABLED = getFirstVisiblePosition() == 0; // We are on the first element so we can enable refresh 
         STATE_REFRESH_ENABLED =listIsAtTop() ; 

      this.setClickable(true); 
     } 
     case MotionEvent.ACTION_UP: { 
      STATE_REFRESHING = false; 
      this.setClickable(true); 
      Ref_once=true; 
     } 

    } 
    return super.onTouchEvent(event); 
} 

답변

0

나는 당신이 당신의 onTouch 리스너에 의해 캡처 현재 y 일치하도록 목록보기의 setScrollY()에 필요가 있다고 생각합니다.

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    //System.out.println("First ["+this.getFirstVisiblePosition()+"]"); 

    final float y = event.getY(); 
    final float scrollY = listview.getScrollY(); 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_MOVE: { 

      listview.setScrollY(Y + scrollY); 

      if ((y - startY) > THRESHOLD && STATE_REFRESH_ENABLED && !STATE_REFRESHING && Ref_once) { 
       if(mListener!=null) mListener.onRefresh(); 
       Log.d("CUSTOM LIST"," FOODHOTER LIST LISTENER WORKING"); 
       this.setClickable(false); 
       Ref_once=false; 
      } 
     } 
     break; 
     case MotionEvent.ACTION_DOWN: { 
      startY = y; 
      // STATE_REFRESH_ENABLED = getFirstVisiblePosition() == 0; // We are on the first element so we can enable refresh 
         STATE_REFRESH_ENABLED =listIsAtTop() ; 

      this.setClickable(true); 
     } 
     case MotionEvent.ACTION_UP: { 
      STATE_REFRESHING = false; 
      this.setClickable(true); 
      Ref_once=true; 
     } 

    } 
    return super.onTouchEvent(event); 
} 
+0

아니요, 작동하지 않습니다. 나는 내 손가락을 아래로 드래그 할 때 전체 목록 뷰를 드래그 할 수 있어야한다. – Samantha

+0

일부 변경했다. 이제 listview를 참조하고 변수 이름이 코드에서 무엇인지 모르고 ACTION_MOVE를 기반으로 델타 스크롤로 변경했습니다. –

관련 문제