0

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

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

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

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

如何在我的 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);
            }
        });
}
4

2 回答 2

1

我所做的是设置一个阈值......我在屏幕上跟踪手指的移动;如果达到一定数量,我将其视为翻转;否则单击按钮(或 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;
        }
于 2020-12-14T10:47:29.353 回答
0

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

于 2020-12-14T11:09:01.983 回答