今日、Android カスタム ビューでのタッチ イベント処理に問題が発生しました。この場合、親ビュー呼び出し weekview とチルド呼び出し weekdayview を作成しました。親ビューをスクロールしたいのですが、両方のビューでタッチイベントを実装すると機能しません。
誰でもこれについて私を助けることができます.それは私にとって本当に役に立ちます. ありがとうございました
今日、Android カスタム ビューでのタッチ イベント処理に問題が発生しました。この場合、親ビュー呼び出し weekview とチルド呼び出し weekdayview を作成しました。親ビューをスクロールしたいのですが、両方のビューでタッチイベントを実装すると機能しません。
誰でもこれについて私を助けることができます.それは私にとって本当に役に立ちます. ありがとうございました
class ChildView extends View {
public void setGestureDetector (GestureDetector g)
{
gesture = g;
}
@Override
public boolean onTouchEvent (....)
{
return gesture.onTouchEvent (....); // touch event will dispatch to gesture
}
}
class ParentView extends View implements GestureDetector.OnGestureListener {
gesture = new GestureDetector (this);
child = new ChildView (...);
child.setGestureDetector (gesture);
@Override
public boolean onTouchEvent (..)
{
// handle your parent touch event here
}
public boolean onDown (...)
{
return true;
}
public boolean fling (...)
{
// here to handle child view fling
}
}
これは、GestureDetectorを使用するための概念を示すためのペソコード(実際のAndroid Javaではありません)です。親ビューの子ビューからすべてのイベントを処理できます。私がAndroidスマートフォンでテストしたところ、ChildViewのonTouchEventはACTION_UPをうまく認識しなかったため、Child Viewをスワイプしても、フリングが機能しない場合があります(ACTION_UPによって異なります)。
したがって、Child Viewでより正確なスワイプを記述したい場合は、owen Gesture Detectクラスを記述し、ChildViewでこれを行うことができます-
float oldX;
float distanceX;
public boolean onTouchEvent (MotionEvent event...)
{
if (event.getAction == MotionEvent.ACTION_DOWN) {
// handle down
oldX = event.getX ();
}
if (event.getAction == MotionEvent.ACTION_MOVE {
// handle move
distanceX = event.getX() - oldX; // more accurate
gesture.onSwipe (distanceX); // your own gesture class
}
}
スワイプの速度を設定し (ユーザーのスワイプの意図を検出するため)、子ビューで onTouchEvent() をオーバーライドします。ここで、super.onTouchEvent() を呼び出して戻ります。これにより、親ビューが呼び出されます。親ビューでイベントを処理します。