2012-06-26 2 views
1

내 응용 프로그램에서는 단추 및 단추로 작동하는 다른보기에 간단한 애니메이션을 추가하려고합니다.내 뷰에 대해 내 onTouchListener가 호출되는 이유는 무엇입니까?

이렇게하려면 모든보기에 사용자 지정 onTouchListener를 설정하고 해당 뷰에서 startAnimation을 호출하십시오.

내 onTouch 방법은 다음과 같습니다

public boolean onTouch(View v, MotionEvent event) { 

    // Only show animation when enabled. 
    if (v.isEnabled()) { 
     switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      v.startAnimation(shrink); 
      break; 
     case MotionEvent.ACTION_UP: 
      v.startAnimation(grow); 
      break; 
     } 
    } 
    return v.onTouchEvent(event); 
} 

사용자가 손가락을 놓을 때 사용자가 원래 크기로 버튼과 수익을 압박하면서보기는 작은 크기로 조정되므로이 확인을 작동합니다.

그러나 어떤 이유로 터치 된 단추 근처에있는 다른 단추도 UP 이벤트를 얻으므로 작은 애니메이션 깜박임이 발생합니다.

왜이게 더 중요합니까?이 성가신 행동을 어떻게 방지합니까?

편집 : 그냥 알기 쉽습니다. 이웃 뷰는 동일한 리스너 인스턴스에 등록되지만 내 손가락으로는 접촉되지 않습니다.

+0

이 메서드에 logging 문을 추가하고 뷰 ID를 인쇄 해 두는 것이 좋습니다. 또한 활동의 ​​onCreate 메소드에 몇 개의 후보 뷰 ID를 인쇄하십시오. 아마 당신이 볼 수있는 것은 놀랄만 한 것이 아니지만 최소한이 이벤트가 예상보기와 "이웃"보기 모두에서 실행되고 있는지 확인합니다. –

답변

0

문제가 여러 개의보기에서 동일한 애니메이션 인스턴스를 사용하고있었습니다. 각보기마다 별도의 인스턴스를 생성하면 문제가 해결되었습니다.

0

청취자 등록보기는 다음과 같은 방법으로 통보를 받아야합니다.

View의 ID를 명시 적으로 확인한 다음 애니메이션 만 시작할 수 있습니다.

public boolean onTouch(View v, MotionEvent event) { 

    if (v.getId() == R.id.desired_view_id) { 
     // Only show animation when enabled. 
     if (v.isEnabled()) { 
      switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       v.startAnimation(shrink); 
       break; 
      case MotionEvent.ACTION_UP: 
       v.startAnimation(grow); 
       break; 
      } 
     } 
    } 
    return v.onTouchEvent(event); 
} 
+0

다른보기도 동일한 수신기에 등록됩니다. 그러나 내가 터치하지 않더라도 이런 일이 발생합니다. – monoceres

+0

정확히 !! 당신이 작성한 메소드는 모든 뷰에 적용 가능할 것입니다. 왜이 메소드를 호출했는지 ID로 확인해야합니다. 위에서 사용한 스 니펫을 사용하십시오. –

관련 문제