android - OnClick ImageView 与 OnFling ViewFlipper

标签 android imageview viewflipper onfling

我有一个 ViewFlipper,它包含一个 ImageView。我希望能够通过滑动来更改图像/ View ,然后单击图像来播放声音。

我有一个 GestureDetector,它正在处理 OnFling 来更改 View 。我尝试将 onClickListener 放入 imageview,该监听器有效,但停止了 OnFling 工作。

最后,我向 GestureDetector 添加了一个 onSingleTapConfirmed。这有效,但是它会在 Activity 中的任何位置注册单击,而不仅仅是 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;
}

最佳答案

我以前也遇到过这个问题。

也许你可以尝试通过为ViewFlipper设置OnTouchListener来实现单击,这样ViewFlipper将成为唯一的触摸事件接收器。然后在onTouch函数中编写播放声音的代码。最后,将onTouch函数的返回值设置为false,以保持onFling正常工作。

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

这只是解决这个问题的一个简单的解决方案。如果你想实现更复杂的功能,例如避免手指在屏幕上滑动以改变 View 时播放声音,你必须花更多的精力来区分手势,例如计算ACTION_DOWN事件和ACTION_UP事件之间的时间,如果小于300ms则播放声音。

希望这对您有帮助。 :)

关于android - OnClick ImageView 与 OnFling ViewFlipper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6540661/

相关文章:

android - 在android中动态地将布局添加到适配器的getview方法中

android - 为什么 Picasso 花时间在 ImageView 中显示图像?

Android viewflipper 动画滞后

Android ViewFlipper + 手势检测器

android - 包含图像和视频的幻灯片

android - 使用移动数据时出现 JsonSyntaxException

java - libGDX - 添加分数并将其显示在屏幕的左上角?

android - 增加 minSdkVersion 会导致内存不足错误

android-async-http loopj 设置下载文件的保存路径

java - ImageView 圆角