【问题标题】:android how to make item touchlistener in gridViewandroid如何在gridView中制作项目触摸监听器
【发布时间】:2016-06-27 11:11:24
【问题描述】:

我正在使用 itemlongclicklistener 来操作我的 gridview 中的项目。 我想用触摸监听器更改 longclick。 这是我的代码

//drag artifact on long clic
        OnItemLongClickListener myOnItemLongClickListener = new OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view,
                                           int position, long id) {

                Artifact selectedItem = (Artifact) (parent.getItemAtPosition(position));
                ArtifactAdapter associatedAdapter = (ArtifactAdapter) (parent.getAdapter());
                List<Artifact> associatedList = associatedAdapter.getList();

                PassObject passObj = new PassObject(view, selectedItem, associatedList, position);

                ClipData data = ClipData.newPlainText("", "");
                View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
                view.startDrag(data, shadowBuilder, passObj, 0);
                view.setVisibility(View.INVISIBLE);
                zPLayout.setVisibility(View.VISIBLE);
                if (associatedList == listArtifact) {
                    trashEditLayout.setVisibility(View.VISIBLE);
                    optionsArtifactLayout.setVisibility(View.GONE);
                }

                return true;

            }

        };

我该怎么做?

【问题讨论】:

  • 你想在触摸事件上实现ItemLongClick?

标签: android gridview ontouchlistener onlongclicklistener


【解决方案1】:

这样试试

private static final int MIN_CLICK_DURATION = 600;
private long startClickTime;
private boolean longClickActive;

your_view.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:

              if (longClickActive == false) {
                                longClickActive = true;
                                startClickTime = Calendar.getInstance().getTimeInMillis();
                            }
            break;

        case MotionEvent.ACTION_UP:

             if (longClickActive == true) {
                                long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
                                if (clickDuration >= MIN_CLICK_DURATION) {
                                    longClickActive = false;
                                    // long click detected here 
                                }
             }

            break;
       case MotionEvent.ACTION_UP:

             longClickActive = false;

            break;
        default:
            break;
        }
        return true;
    }

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2017-05-18
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    相关资源
    最近更新 更多