「NodeGrid」と呼ばれるカスタム ViewGroup の子である「Node」と呼ぶカスタム ビューがあります。「NodeGrid」クラスは、より具体的には RelativeLayout を拡張します。
カスタム ビュー クラス (「ノード」) に次のコード スニペットがあります。
private boolean isBeingDragged = false;
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
isBeingDragged = true;
}
else if (event.getAction() == MotionEvent.ACTION_UP)
{
isBeingDragged = false;
}
else if (event.getAction() == MotionEvent.ACTION_MOVE)
{
if (isBeingDragged)
{
float xPosition = event.getX();
float yPosition = event.getY();
//change the x and y position here
}
}
return false;
}
問題:
このコードでブレークポイントを設定した後、onTouchEventはMotionEvent.ACTION_DOWNの場合にのみ呼び出され、他の 2 つのケース (「アクション アップ」または「アクション ムーブ」) では呼び出されないようです。これを引き起こしている可能性のある何かを知っている人はいますか?
また(関連する可能性があります):
ビューが ViewGroup にどのように追加されるかは重要ですか? 「addView」に加えて、「addFocusables」や「addTouchables」など、ViewGroup に子を追加するためのメソッドが他にもあることに気付きました。現在、「addView」を使用して子ビューを ViewGroup に追加しているだけです。