MotionEvent ACTION UP无法检测到长按

问题描述 投票:0回答:1

我在使用MotionEvent时遇到了一些问题。我想在用户按下按钮时显示背景更改(但尚未发布),因此OnClick可能无法提供帮助。我注意到MotionEvent能够检测到压力和释放。

结果我实现了一个简单的onTouch事件,如下所示:

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if(event.getAction() == MotionEvent.ACTION_DOWN) {
                // Make Background Changes

                Log.i("DOWN", String.valueOf(getAdapterPosition()));
                sparseBooleanArray.put(getAdapterPosition(), true);
                notifyItemChanged(getAdapterPosition());

            } else if (event.getAction() == MotionEvent.ACTION_UP) {
                // Revert background to normal

                Log.i("UP", String.valueOf(getAdapterPosition()));
                sparseBooleanArray.put(getAdapterPosition(), false);
                notifyItemChanged(getAdapterPosition());
            }
            return false;
        }

这意味着当我按 - >背景变为绿色时

当我发布 - >恢复到原始(白色)。

它在正常点击时效果很好,但是当尝试长按时,正在调用DOWN,但是当释放UP时没有被调用。

所以我需要再次执行正常点击以使背景恢复正常。

它是原始设计,我需要利用OnLongClickedListener并在发布时手动恢复正常。

谢谢。

android motionevent
1个回答
1
投票

使用按下状态将状态列表用作项目的背景会更容易。见https://developer.android.com/guide/topics/resources/drawable-resource#StateList

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
           android:drawable="@color/colorGreen" />
    <!-- This is the default state item, at the end of the list -->
    <item android:state_pressed="false"
           android:drawable="@color/colorWhite" />
</selector>
© www.soinside.com 2019 - 2024. All rights reserved.