OnClick ImageView с OnFling ViewFlipper - PullRequest
       35

OnClick ImageView с OnFling ViewFlipper

2 голосов
/ 01 июля 2011

У меня есть ViewFlipper, который содержит один ImageView.я хочу иметь возможность провести пальцем, чтобы изменить изображение / представление, и щелкнуть изображение, чтобы воспроизвести звук.

У меня есть GestureDetector, который обрабатывает OnFling для изменения вида.Я попытался поместить onClickListener в просмотр изображений, который работал, но остановил работу OnFling.

Наконец, я добавил onSingleTapConfirmed в мой GestureDetector.Это сработало, однако регистрирует щелчок в любом месте действия, а не только в ImageView.

Кто-нибудь может подсказать, как сузить onSingleTapConfirmed, чтобы просто работать с Imageview?

Вот мой код до сих пор:

 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;
}

1 Ответ

3 голосов
/ 01 июля 2011

Я сталкивался с этой проблемой в прошлом.

Возможно, вы можете попытаться реализовать одно касание, установив OnTouchListener в ViewFlipper, таким образом, ViewFlipper будет единственным приемником событий касания.Затем напишите воспроизводимый звуковой код в функции onTouch.Наконец, установите возвращаемое значение функции 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 и воспроизвести звук, еслиэто менее 300 мс.

Надеюсь, это будет полезно для вас.:)

...