なぜViewGroup
はonInterceptTouchEvent
にACTION_DOWN
しか得られませんか?ドキュメントによると、falseが返される限り、すべてのイベントタイプを受け取る必要があります。 http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent%28android.view.MotionEvent%29 ポイント#3。onInterceptTouchEventはACTION_DOWNだけを取得します
サンプルコード:
public class MainActivity extends Activity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new Container(this));
}
private class Container extends LinearLayout {
public Container(Context context) {
super(context);
setBackgroundColor(0xFF0000FF);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
Log.i(TAG, "onInterceptTouchEvent");
int action = ev.getActionMasked();
switch (action) {
case MotionEvent.ACTION_DOWN:
Log.i(TAG, "onInterceptTouchEvent.ACTION_DOWN");
break;
case MotionEvent.ACTION_MOVE:
Log.i(TAG, "onInterceptTouchEvent.ACTION_MOVE");
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
Log.i(TAG, "onInterceptTouchEvent.ACTION_UP");
break;
}
return super.onInterceptTouchEvent(ev);
}
}
}
どのように親ができ:
を私は、実行可能なコードを持っています子供が既にそれを派遣した場合、イベントを傍受するか? –
子供はタッチイベント(通常)を送信しません。タッチイベントは親から子へ反復的にバブルします。下に行くとonInterceptTouchEventが呼び出され、それがonTouchEventになります。それは誰かが真実を返すまで泡立ち続ける。 – user123321
onTouchListenerを持つViewをViewGroupに追加すると、それがViewGroupに追加されます。このリスナーは呼び出され、何らかの動作を開始してからfalseを返します。その後、ViewGroupはイベントを「インターセプト」できますか?ハンドラのコードがすでに実行されている場合は? –