如何在 Android 中同时为 ImageFlipper 实现 OnClick 和 Sliding 事件

How to implement both OnClick and Sliding events at once for an ImageFlipper in Android

我正在尝试开发具有以下行为的 Android 图像翻转器。

  1. activity启动时自动开始翻转(翻转 间隔也已实施)。
  2. 用户还可以在翻转器中向右或向左滑动图像
  3. 用户应该能够单击特定图像并加载另一个图像 activity

项目 1,我可以毫无问题地成功实施。

问题是,我无法同时实现 2 和 3,因为 imageView.OnClickListner() 总是在触发 Flipper.OnTouch() Listner 之前先出现。因此,滑动永远不会发生,但新的 activity 会立即加载。

如何在我的 Android 应用程序中同时实现所有 3 个要求?

public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {

        View root = inflater.inflate(R.layout.fragment_home, container, false);

        int sliderImgs[] = {R.drawable.slider_img_1, R.drawable.slider_img_1, R.drawable.slider_img_1};
        viewFlipper = root.findViewById(R.id.img_slider);
        mContext = this.getContext();
        viewFlipper.setAutoStart(true);
        viewFlipper.setFlipInterval(20000);

        viewFlipper.setInAnimation(this.getContext(), R.anim.slide_in_right);
        viewFlipper.setOutAnimation(this.getContext(), R.anim.slide_out_left);
        viewFlipper.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(final View view, final MotionEvent event) {
                detector.onTouchEvent(event);
                return true;
            }
        });

        for(int sliderImg:sliderImgs){
            slideshowImages(sliderImg);
        }
}

    private void slideshowImages(int image){
        ImageView imageView = new ImageView(this.getContext());
        imageView.setBackgroundResource(image);

        viewFlipper.addView(imageView);

        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                View notificaionFragment = getLayoutInflater().inflate(R.layout.fragment_property_details, null);
                BottomSheetDialog bottomSheetDialog = arrangeBottomSheet(notificaionFragment);
                new Notification(notificaionFragment, mContext, getLayoutInflater(), bottomSheetDialog);
            }
        });
}

我所做的是设置一个阈值...我跟踪手指在屏幕上的移动;如果达到一定数量,我将其视为翻转;否则它是单击按钮(或 ImageView,或其他),然后调用 performClick。

@Override
        public boolean onTouch(View v, MotionEvent event) {
            int action = event.getActionMasked();
            switch (action) {
                case MotionEvent.ACTION_DOWN:
                    startX = event.getX();
                    break;
                case MotionEvent.ACTION_UP:

                    float endX = event.getX();
                    float endY = event.getY();
                    //swipe right
                    if (startX > endX && (startX - endX) > 10.0) {
                        if (pageIndex < totalPages) {
                            pageIndex++;
                            vFlipper.setInAnimation(EventActivity.this, R.anim.transition_in_left);
                            vFlipper.setOutAnimation(EventActivity.this, R.anim.transition_out_left);
                            vFlipper.showNext();
                        }

                    } else if ((startX - endX) > 0 && (startX - endX) < 10.0) {
                        v.performClick();
                    }
                    float operacion = Math.abs(startX - endX);
                    if (startX < endX && operacion > 10.0) {
                        if (pageIndex > 1) {
                            pageIndex--;
                            vFlipper.setInAnimation(EventActivity.this, R.anim.transition_in_right);
                            vFlipper.setOutAnimation(EventActivity.this, R.anim.transition_out_right);
                            vFlipper.showPrevious();
                        }
                    } else if (operacion < 10 && operacion != 0) {
                        v.performClick();
                    }

                    if (startX - endX == 0) {
                        v.performClick();
                    }

                    break;
            }
            return true;
        }

好吧...看看你的实现,我建议你改用 viewPager,它对用户更友好,你可以轻松添加片段或视图,而且不那么棘手。 https://androidwave.com/auto-scroll-viewpager-android/ 看看这个教程,它工作得很好,我用它在我的一个应用程序中实现了自定义 viewPager!