2013-07-31 1 views
4

내 ListView에서 항목을 드래그하려고하면 ACTION_DOWN 이벤트가 항상 생기는 것은 아닙니다. 많은 ACTION_MOVE 이벤트와 하나의 ACTION_UP 이벤트 만 있습니다. 항상 그런 것은 아닙니다. 나는 ACTION_DOWN을 3 번 받았다. 혼란스러워.안드로이드 ListView onTouchEvent가 항상 ACTION_DOWN을주지 않는다

비슷한 질문을 보았지만 대답이 내 것이 적합하지 않은 것 같습니다. 아무도 이것이 왜 일어나고 있는지 생각할 수 있습니까?

감사

//list_client -- a listview 
list_client.setOnTouchListener(new View.OnTouchListener() { 
    float f1 = -1, f2 = -1 ; 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     switch(event.getAction()){ 
      case MotionEvent.ACTION_DOWN: 
       f1 = event.getRawY(); 
        break; 
      case MotionEvent.ACTION_MOVE: 
       f2 = event.getRawY(); 
       if(f2 - f1 > 50){ 
        if(View.VISIBLE != rl_search_and_add.getVisbility() && ){ rl_search_and_add.setVisibility(View.VISIBLE); 
       } 
       f1 = f2; 
       }else if (f2 - f1 < -50){ 
        rl_search_and_add.setVisibility(View.GONE); 
        f1 = f2; 
       } 
       break; 
      case MotionEvent.ACTION_UP: 
       f1 = -1; f2 = -1; 
       break; 
     } 
     return false; 
    } 
}); 
+0

안녕하세요, 드래그가 완료되면, 당신은 하나의 다음 ACTION_DOWN, 여러 ACTION_MOVE 그리고 마지막으로 하나 ACTION_UP을 얻어야한다 . 그럴까요? – buzeeg

+0

하지만 ACTION_MOVE가 많았고 ACTION_UP도 매회 있었지만 ACTION_DOWN은 5 번 밖에 없었습니다. 어제 ACITON_UP이 2 번 나왔어. 재미 없어. 끔찍해. – wzco

+0

어떤 사람들은 ACTION_DOWN을 사용하는 것을 모르는 뭔가를 말했습니다. – wzco

답변

1

는 그 행동에 대한 몇 가지 이유가있을 수 있습니다.

  • 사용자가 목록을 약간 놓친 가능하며 MotionEvent.ACTION_DOWN 다른 구성 요소에 의해 처리하지만, 사용자가 드래그 계속 목록보기 영역을 칠하는 방법을 지금, 당신은 MotionEvent.ACTION_MOVE 조치를 받았습니다.
  • 또 다른 가능성은 많은 이벤트가 있었고 과거 이벤트로 이동했기 때문에 최신 이벤트 만 수신했다는 것입니다. 모든 역사적 방법 인 MotionEvent을 사용하여 볼 수 있습니다.
0

이 같은 onInterceptTouchEvent 오버라이드 (override) : 다음

@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      yDown = event.getRawY(); 
      break; 
     default: 
      break; 
    } 
    return super.onInterceptTouchEvent(event); 
} 

를 프로그램에 yDown을 사용