我有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如果真的只是点击,但如果用户拖动整个布局他们的手指失活。
有没有办法可以做到这一点?
单边按钮状态不会以这种方式出现。 – AndroidPenguin