2012-12-27 2 views
0

나는 라디오 버튼과 ImageView 및 패딩이 포함 된 5 개의 선형 레이아웃을 가지고 있습니다. 사용자가 라디오 버튼이 포함 된 선형 레이아웃의 일부를 클릭하면 라디오 버튼을 클릭하고 싶습니다. 라디오 버튼의 온 프레스 상태를 얻으려면 ontouchlistener에서 터치 이벤트를 파견하는 것이 가장 좋은 방법이라고 생각했습니다.dispatchTouch 둘러싼 레이아웃의 이벤트를 포함 버튼

내 문제는 어떻게 구현하는 것이 가장 좋습니까? 이것은 꽤 잘 작동하지만 사용자가 때때로 레이아웃 떨어져 자신의 손가락을 드래그 할 때 onPressed 상태가 영구적으로 남은 가끔 딸꾹질의 원인

@Override 
public boolean onTouch(View v, MotionEvent arg1) { 
      //gets the index of which LinearLayout was touched 
    int rb = lArray.indexOf(v); 
      // uses this to identify the LinearLayout and RadioButton to control 
    LinearLayout l = lArray.get(rb); 
    RadioButton r = rbArray.get(rb); 

    switch (arg1.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     Sy = arg1.getY(); 
     if (rb != -1) { 
      r.setPressed(true); 
     } 
     break; 
    case MotionEvent.ACTION_MOVE: 
     My = arg1.getY(); 
     if (rb != -1 && Math.abs(Sy - My) > l.getHeight()/2) { 
      r.setPressed(false); 
     } 
     break; 
    case MotionEvent.ACTION_UP: 
     My = Sy = 0; 
     if (rb != -1) { 
      if (r.isPressed() && r.isEnabled()) { 
       r.performClick(); 
      } 
     } 
     for (RadioButton b : rbArray) { 
      b.setPressed(false); 
     } 
     break; 
    } 
    return true; 
} 
} 

:

내가 수동으로 눌러 상태를 설정 시도 하나의 방법이었다. 그러나 이것은 단지 그것이 정말 그냥 클릭 온 클릭하면 호출하지만 사용자가 레이아웃에서 자신의 손가락 한 개를 드래그하는 경우 비활성화

@Override 
public boolean onTouch(View v, MotionEvent event) { 

    int rb = lArray.indexOf(v); 
    RadioButton r = rbArray.get(rb); 

     r.dispatchTouchEvent(event); 

    return true; 
      } 

:

또 다른 시도

이 있었다.

내가 할 수있는 방법이 있습니까?

답변

0

linearlayout을 누른 상태에서 온 터치 리스너에서 눌렀을 때 라디오 버튼을 켜고 onclick 리스너를 추가 한 경우에 사용됩니다. 둘 다 완벽하게 일했습니다!

1

선형 레이아웃을 클릭하면 라디오 버튼을 선택 (선택 취소)합니까? 레이아웃에 클릭 리스너를 설정 한 다음 라디오 버튼을 프로그래밍 방식으로 선택하지 않는 이유는 무엇입니까?

+0

라디오 버튼 온 프레스 상태가 이런 식으로 발생하지 않습니다. – AndroidPenguin

관련 문제