【问题标题】:Make ImageView appear when RecyclerView is longpressed and disappear when released?长按RecyclerView时让ImageView出现,释放时消失?
【发布时间】:2018-09-09 04:18:35
【问题描述】:

我想创建一个RecyclerView,用户可以在其中长按图像并预览全尺寸图像,直到他们释放长按。

我大部分时间都在工作,但我遇到的问题是,如果我开始长按,然后拖动手指(同时仍然按住单击),侦听器不再等待我的 ACTION_UP 事件和预览图像永远不会消失。有没有办法忽略拖动/滚动,以便在我释放长按时我的预览图像视图消失?

这是我为事件监听器准备的:

       /* Long press will trigger hover previewer */
        holder.thumbnailImageView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View pView) {

                holder.thumbnailImageView.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View pView, MotionEvent pEvent) {
                        pView.onTouchEvent(pEvent);
                        // We're only interested in when the button is released.
                        if (pEvent.getAction() == MotionEvent.ACTION_UP) {
                            if (isImageViewPressed) {
                                // Do something when the button is released.
                                isImageViewPressed = false;
                                mHoverView.setVisibility(View.GONE);
                            }
                        }                                                 
                        return false;
                    }
                });

                isImageViewPressed = true;
                GlideApp.load(item.getUrl()).into(mHoverView);
                mHoverView.setVisibility(View.VISIBLE);
                return true;
            }
        });

【问题讨论】:

  • 只是一个问题 - 为什么你的 setOnTouchListenersetOnLongClickListener 里面?

标签: android android-recyclerview android-event


【解决方案1】:
/* Long press will trigger hover previewer */
        holder.thumbnailImageView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View pView) {
                isImageViewPressed = true;
                GlideApp.load(item.getUrl()).into(mHoverView);
                mHoverView.setVisibility(View.VISIBLE);
                return true;
            }
        });

       holder.thumbnailImageView.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View pView, MotionEvent pEvent) {
                        pView.onTouchEvent(pEvent);
                        // We're only interested in when the button is released.
                        if (isImageViewPressed && pEvent.getAction() == MotionEvent.ACTION_UP) {
                                // Do something when the button is released.
                                isImageViewPressed = false;
                                mHoverView.setVisibility(View.GONE);
                        }                                                 
                        return true;
                    }
                });

这将起作用,并且您的代码无法正常工作,因为 longClickListener 没有收到动作事件(也没有动作事件),并且您当前正在做的是设置触摸监听器 从未得到 Action_DOWN 即默认情况下,视图的 ontouch() 在 Action_Down 上返回 false,因此您必须在调用 action down 之前覆盖并 返回 true 所以它得到了动作和动作等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2020-11-29
    相关资源
    最近更新 更多