2011-07-06 18 views
5

更新:何が起きているのかを把握しました。コメントを参照してください。ScaleGestureDetector.OnScaleGestureListener.onScaleEnd()メソッドがヒットしない

スケールジェスチャを受け取るまで、すべてのジェスチャを最初の子に渡すViewSwitcherを作成しようとしています。その子が最初の子に戻ったときに、その子が完全に再びズームアウトされるまで、2番目の子に渡します。私のサブクラスはScaleGestureDetectorを持って、私は非常に単純なリスナー行わ:あなたはそれがないすべては、その後、所有者クラス内のメソッドにいくつかのイベントを渡し、建設上の所有者オブジェクトへの参照を取ることで見ることができるように

protected class OnScaleModeSwitcher implements ScaleGestureDetector.OnScaleGestureListener 
    { 
     protected PageFlipSwitcher owner; 

     public OnScaleModeSwitcher(PageFlipSwitcher newOwner) 
     { 
      super(); 
      owner = newOwner; 
     } 

     @Override 
     public boolean onScale(ScaleGestureDetector detector) { 
      return false; 
     } 

     @Override 
     public boolean onScaleBegin(ScaleGestureDetector detector) { 
      owner.onScaleBegin(); 
//returning false here causes the rest of the gesture to be ignored. 
      return false; 
     } 

     @Override 
     public void onScaleEnd(ScaleGestureDetector detector) { 
      owner.onScaleEnd(); 
     } 
    } 

を。ただし、コードによってonScaleEnd()に到達していません。

私はonInterceptTouchEventがちょっとしたことに気づいています。私はできるだけ密接にそれのためのAndroidのドキュメントでの提案に従い、

@Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) 
    { 
     onTouchEvent(ev); 
     return false; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) 
    { 
//mode is the name of the ScaleGestureDetector 
     mode.onTouchEvent(ev); 

//this code just passes events to the children 
//it seems to work OK 
     if(zoomActive) 
     { 
      //ZoomSwitcher 
      getChildAt(1).onTouchEvent(ev); 
     } 
     else 
     { 
      //Gallery 
      getChildAt(0).onTouchEvent(ev); 
     } 
     return true; 
    } 

を持って、私はGestureDetectorがACTION_UPイベントを受信しないことをどこかに読んで:

Android: How to detect when a scroll has ended

は何があるということですここで起こっている?もしそうなら、onScaleEnd()メソッドのポイントは何ですか?

EDIT:

私はこれを働いている:私のメソッドはfalseを返すので、それはあります。 Eclipseはいくつかのスタブを自動的に実装しましたが、返された値を変更しませんでした。

答えて

7

onScaleBegin(...)からfalseを返すScaleGestureDetectorが設定されている場合、 。一般に、MotionEventを消費してもfalseを返すメソッドは、リスナーがリセットされたときにACTION_UPの後まで、後続のMotionEventを取得しません。

関連する問題