私は AndEngine を使用しており、カスタム ラジオボタンのコードは次のとおりです。
blackRadioNotSelected = new Sprite(0, 0, blackRadio, vertexBufferObjectManager) {
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
if (pSceneTouchEvent.isActionUp()) {
activity.runOnUpdateThread(new Runnable() {
@Override
public void run() {
Log.d(TAG,"touch");
unregisterTouchArea(blackRadio);
detachChild(whiteRadio);
detachChild(blackRadio);
whiteRadio = whiteRadioNotSelected;
blackRadio = blackRadioSelected;
registerTouchArea(whiteRadio);
attachChild(whiteRadio);
attachChild(blackRadio);
}
});
isWhiteSelected = !isWhiteSelected;
}
return false;
}
};
そして、ラジオボタンをタッチすると、「タッチ」メッセージが表示され、2回目のタッチ後に表示されないため、unregisterTouchArea(blackRadio);
実行されました。ただし、UI は同じです。whiteRadio は選択されているように見えますが、blackRadio は選択されていません。どうなり得るか?
UPD:このコードを他のメソッドに入れようとしましたが、すべてが機能します。それが今どのように見えるかです:
blackRadioNotSelected = new Sprite(0, 0, blackRadio, vertexBufferObjectManager) {
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
if (pSceneTouchEvent.isActionUp()) {
swapColor();
}
return false;
}
};
そしてswapColor();
:
private void swapColor() {
if (isWhiteSelected) {
activity.runOnUpdateThread(new Runnable() {
@Override
public void run() {
Log.d(TAG,"blackNotSelected");
unregisterTouchArea(blackRadio);
detachChild(whiteRadio);
detachChild(blackRadio);
whiteRadio = whiteRadioNotSelected;
blackRadio = blackRadioSelected;
registerTouchArea(whiteRadio);
attachChild(whiteRadio);
attachChild(blackRadio);
}
});
} else {
[...]
}
isWhiteSelected = !isWhiteSelected;
}
しかし、以前のバージョンは別のプロジェクトで動作していたため、何が問題だったのかはまだわかりません。誰かが私にそれを説明できますか?