Android:GestureDetectorが機能していない(GestureDetector.ontouchevent(event)常に偽)

StackOverflow https://stackoverflow.com/questions/4394025

  •  10-10-2019
  •  | 
  •  

質問

私は異なる子供の活動で自分のタバアクティティを実装しました:

intent = new Intent().setClass(this, MyChildTabActiviy.class);
// Initialize a TabSpec for each tab and add it to the TabHost
spec = getTabHost.newTabSpec("tag").setIndicator("indicator", getResources().getDrawable(R.drawable.icon)).setContent(intent);
getTabHost.addTab(spec);
...

これまでのところ問題はありません。すべてが完全にうまく機能します。タブ間でプログラムで切り替え、タブ内のアクティビティをアクティビティグループに置き換えます。多くのチュートリアルに示されているように。

しかし、私の問題は、Flingジェスチャーをチェックしたいとき、GestureDetector.ontouchevent(イベント)が常に虚偽を返しているため、ジェスチャーは登録されていません。

これは私のGestureDetectorの実装です。

public class MyChildTabActiviy extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        // ... building views, controls, etc.
        GestureDetector gestureDetector = new GestureDetector(this, new MyGestureDetector());
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    }
 class MyGestureDetector extends SimpleOnGestureListener {
  @Override
  public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
   if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
    return false;
   // left to right swipe and right to left swipe
   if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
     && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
    //... fling logic ...
    return true;
   } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
     && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
    //... fling logic ...
    return true;
   }
   return false;
  }
 }

問題は、このコード(およびFLING検出)が完全に正常に機能することです。これらのアクティビティ(4つの基本的なアクティビティがあり、時々他のアクティビティに切り替えることがあります)、例えばランチャーアクティビティとしては、他のアクティビティに切り替えます) 。しかし、私はそれを称賛の範囲内で動作させることはできません。私はすでにgesturedetectorをタバクティブに追加しようとしましたが、それは機能しません。 GestureDetectorを、いくつかのレイアウトビューやボタン、ビューフリッパーなどのような特定のビューに追加しようとしましたが、うまくいきません。デバッグすると、タッチイベントがトリガーされ、モーションが登録されていることがわかりますが、それはフリングやその他のジェスチャーとして評価されていません。

私の質問は、Androidのタブを使用したGestureDetectorsの使用に関する制限はありますか?私が言ったように、ジェスチャーはタバクティティの外側に完全に登録されています。

答えを知っている人の助けに感謝します。制限がある場合、どのようにして誰かがその問題の回避策を得ることができますか?

答えを前もってありがとう。

役に立ちましたか?

解決

言及された答えを見てください ここ. 。彼はあなたとほぼ同じことをしていますが、最高評価の答えに関する最初のコメントを見ると、Cdsboyはオンダウンを実装してTrueを返すことで機能しました。なぜそれが必要なのかはわかりませんが、それは私のために働いていました。

他のヒント

@abhinavの答えを補完するものとして(ところで私も助けてくれました)、私は私がオーバーライドしていると思いたいと思います onDown() デフォルトの実装で必要です SimpleOnGestureListener 戻ることです false. 。であること ACTION_DOWN リスナーに最初に到達したのは、それが何であれ、イベントを破棄するようにするでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top