0

我有一个包含表格行的项目,可以通过拖放将其移动到其他表格。我希望这些行也可以突出显示,我将 focusable 和 focusableontouchmode 设置为 true 并将背景设置为 list_selector_background 并使行可点击。没有 OnTouchListener 选择工作正常,但如果我将 onTouchListener 设置为行,它会在我单击它时立即启动拖放过程。有没有办法设置 onTouchListener 的延迟,以便它可以区分单击和拖放过程的开始?(因此您必须按住行上的单击才能开始拖动)

OnTouchListener:

private final class MyTouchListener implements OnTouchListener {
    public boolean onTouch(View view, MotionEvent motionEvent) {
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
            ClipData data = ClipData.newPlainText("", "");
            DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(
                    view);
            view.startDrag(data, shadowBuilder, view, 0);
            view.setVisibility(View.INVISIBLE);
            return true;
        } else {
            return false;
        }

    }
}

行:

teacherRow.setId(tid);
teacherRow.setBackgroundResource(drawable.list_selector_background);
teacherRow.setFocusable(true);
teacherRow.setFocusableInTouchMode(true);
teacherRow.setClickable(true);
teacherRow.setOnTouchListener(new MyTouchListener());

我还尝试使用行上的 OnClickListener 来解决它,但这也不起作用

4

1 回答 1

0

有没有办法设置 onTouchListener 的延迟,以便它可以区分单击和拖放过程的开始?

我不确定我是否完全理解您想要做什么,但请查看以下代码:

        public boolean onTouch(final View view, MotionEvent motionEvent) {
            if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                mHandler.postDelayed(new Runnable() {

                    @Override
                    public void run() {
                        if (view.isPressed()) {
                            ClipData data = ClipData.newPlainText("", "");
                            DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(
                                    view);
                            view.startDrag(data, shadowBuilder, view, 0);
                            v.setVisibility(View.INVISIBLE);
                        }
                    }

                }, (long) (1.5 * ViewConfiguration.getLongPressTimeout()));
            }
            return false;
        }

哪里mHandler是一个简单的Handler例子。

于 2013-02-23T21:01:16.780 回答