0

我有 5 个线性布局,每个包含一个单选按钮和一个 ImageView 以及一些填充。如果用户单击包含单选按钮的线性布局的任何部分,我希望单击单选按钮。为了获得单选按钮的按下状态,我认为从 ontouchlistener 调度触摸事件是最好的方法。

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

这是我尝试手动设置按下状态的一种方法:

@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,但如果用户在布局上拖动手指则将其停用。

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

4

2 回答 2

1

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

于 2012-12-27T04:21:14.417 回答
0

如果在按下线性布局时使用,然后在触摸监听器中将单选按钮设置为按下,并且还添加了一个 onclick 监听器。两者一起完美地工作!

于 2013-01-02T04:54:33.177 回答