2012-12-27 30 views
0

我有5个线性布局,每个布局包含一个单选按钮和一个ImageView以及一些填充。如果用户点击包含单选按钮的线性布局的任何部分,我希望单击单选按钮。为了获得单选按钮的紧缩状态,我认为从ontouchlistener调度触摸事件是实现这一点的最佳方式。dispatchTouchEvent包含按钮的周围布局

我的问题是我如何最好地实现这个?

这是一个方法我试过手动设置按下状态:

@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; 
} 
} 

这工作得相当好,但会导致偶尔打嗝与当用户拖动有时他们的手指关闭布局onPressed状态永久剩余。

的另一种尝试是这样的:

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

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

     r.dispatchTouchEvent(event); 

    return true; 
      } 

然而,这仅调用的onclick如果真的只是点击,但如果用户拖动整个布局他们的手指失活。

有没有办法可以做到这一点?

回答

0

如果按下了linearlayout,则使用该按钮,然后将按钮设置为在按钮侦听器中按下,并且还添加了onclick侦听器。两者一起工作完美!

1

您正试图选择(或取消选择)单选按钮,如果他们点击线性布局?为什么不在布局上设置点击监听器,然后以编程方式选择单选按钮?

+0

单边按钮状态不会以这种方式出现。 – AndroidPenguin