ラジオボタンとImageView、およびいくつかのパディングを含む5つの線形レイアウトがあります。ユーザーがラジオボタンが含まれているlinearlayoutのいずれかの部分をクリックした場合に、ラジオボタンがクリックされるようにしたいと思います。ラジオボタンの押された状態を取得するには、ontouchlistenerからタッチイベントをディスパッチすることがこれを行うための最良の方法だと思いました。
私の問題は、これをどのように実装するのが最善かということです。
これは、プレス状態を手動で設定しようとした1つの方法でした。
@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を呼び出しますが、ユーザーがレイアウト上で指をドラッグすると非アクティブになります。
これを行う方法はありますか?