2011-06-30 12 views
1

私は単一のImageViewを保持するViewFlipperを持っています。私は、画像/ビューを変更するためにスワイプし、画像をクリックしてサウンドを再生できるようにしたい。OnClick ViewFlipperを使用したOnClick ImageView

私はビューを変更するOnFlingを処理しているGestureDetectorを持っています。私はonClickListenerをimageviewに配置しようとしましたが、うまく動作しましたが、OnFlingの作業は中止されました。

最後に、私のGestureDetectorにonSingleTapConfirmedを追加しました。これはうまくいきましたが、ImageViewだけでなく、アクティビティのどこにでもクリックを登録します。

誰もが、画像ビューで作業するためにonSingleTapConfirmedを絞り込む方法を提案できますか?

ここに私のコードは、これまでのところです:

class MyGestureDetector extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     try { 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
       return false; 
      // right to left swipe 
      if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Log.v("Swipe", "Right to Left"); 

       viewFlipper.setInAnimation(slideLeftIn); 
       viewFlipper.setOutAnimation(slideLeftOut); 
       viewFlipper.addView(nextImage(true)); 

       viewFlipper.showNext(); 

      } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       Log.v("Swipe", "Left to Right"); 

       viewFlipper.setInAnimation(slideRightIn); 
       viewFlipper.setOutAnimation(slideRightOut); 
       viewFlipper.addView(nextImage(false)); 
       viewFlipper.showNext(); 
      } 
     } catch (Exception e) { 
      // nothing 
     } 
     return false; 
    } 

    @Override 
    public boolean onSingleTapConfirmed(MotionEvent e) 
    { 
     // TODO Auto-generated method stub 

     Log.v("SingleTap", "OnSingleTapConfirmed Run"); 

     return super.onSingleTapConfirmed(e); 

    }  

} 

private View nextImage(boolean righttoleft) { 
    ImageView imgv1 = new ImageView(this); 

    if(righttoleft == true) 
    { 

      Uri image = Uri.parse("android.resource://com.owentech.brainybaby/drawable/" + variables.letters[variables.currentpos]); 
      imgv1.setImageURI(image); 
      imgv1.setScaleType(ImageView.ScaleType.CENTER_INSIDE); 

    return imgv1; 
} 

答えて

3

私は過去にこの問題が発生していました。

OnTouchListenerをViewFlipperに設定することでシングルタップを実装しようとする可能性があります。そのため、ViewFlipperは唯一のタッチイベント受信者になります。 onTouch機能で演奏音コードを書きます。最後に、onFlingの動作を維持するためにonTouch関数の戻り値をfalseに設定します。

viewFlipper.setOnTouchListener(new OnTouchListener() 
{ 
     @Override 
     public boolean onTouch(View view, MotionEvent e) { 
      // TODO Auto-generated method stub 
      switch(e.getActionMasked()) 
      { 
      case MotionEvent.ACTION_DOWN: 
        //put the playing sound code here. 
        break; 
      } 
      return false; //means that the listener dosen't consume the event 
     } 
} 
); 

これは、この問題を解決するための単なる解決方法です。指を画面上でスワイプしてビューを変更したときの音の再生を避けるなど、より複雑な機能を実現するには、ジェスチャを区別するためにさらに努力する必要があります。 ACTION_DOWNイベントとACTION_UPイベントの間の時間を計算し、300ms未満であればそのサウンドを再生します。

私はこれがあなたに役立つことを願っています。 :)

+0

ありがとうございました。 – Tony

+0

ACTION_DOWNとACTION_UPの間の距離を測定してクリックとフリンジを区別するように管理しました。もう一度お手伝いをしてください。 – Tony

+0

あなたは大歓迎です:) – Chickenrice

関連する問題