android拖放ImageView onTouchListener

标签 android drag-and-drop imageview ontouchlistener motionevent

你好
我在我的应用程序中为 ImageView 设置了一个 onTouchListener,我的目标是拥有一个 ImageView,用户可以在应用程序中四处拖动并放置他们想要的任何位置。

我已经使用在网络上找到的示例代码为我认为可行的 onTouchListener 编写了一些代码,但我遇到了一些问题,而不是让我四处拖动图像,图像调整大小当您将手指拖过它时,它会变大或变小。

有谁知道为什么?
这是我的代码:

    ImageView t1img;

    t1img = (ImageView) findViewById(R.id.imgT1);

    windowWidth = getWindowManager().getDefaultDisplay().getWidth();
    windowHeight = getWindowManager().getDefaultDisplay().getHeight();

    t1img.setOnTouchListener(new View.OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {

            layoutParams = (LayoutParams) t1img.getLayoutParams();

            switch (event.getAction()) {

                case MotionEvent.ACTION_DOWN:

                break;

                case MotionEvent.ACTION_MOVE:

                    int xCoord = (int) event.getRawX();
                    int yCoord = (int) event.getRawY();

                    if (xCoord > windowWidth) {

                        xCoord = windowWidth;
                    }

                    if (yCoord > windowHeight) {

                        yCoord = windowHeight;
                    }

                    layoutParams.leftMargin = xCoord - 25;
                    layoutParams.topMargin = yCoord - 75;

                    t1img.setLayoutParams(layoutParams);

                break;

                default:

                break;
            }

            return true;
        }
    });

最佳答案

如果你需要支持 Gingerbread ,你可以在这里看看我的例子

https://github.com/NAYOSO/android-dragview

如果你只需要支持上面的jelly bean你可以使用Android库中的拖放你可以从这篇文章中看到它

http://developer.android.com/guide/topics/ui/drag-drop.html

有关拖放 View 的一些解释 首先你需要创建触摸监听器,然后调用 startDrag 开始拖动。就这么简单。

private final class dragTouchListener implements OnTouchListener {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v);
                v.startDrag(data, shadowBuilder, v, 0);
                return true;
            } else {
                return false;
            }
        }

    }

你可以使用 onDragListener 来监听放置目标

private class dropListener implements OnDragListener {

    View draggedView;
    CustomTextView dropped;

    @Override
    public boolean onDrag(View v, DragEvent event) {
        switch (event.getAction()) {
        case DragEvent.ACTION_DRAG_STARTED:
            draggedView = (View) event.getLocalState();
            dropped = (CustomTextView) draggedView;
            draggedView.setVisibility(View.INVISIBLE);
            break;
        case DragEvent.ACTION_DRAG_ENTERED:
            break;
        case DragEvent.ACTION_DRAG_EXITED:
            break;
        case DragEvent.ACTION_DROP:

            CustomTextView dropTarget = (CustomTextView) v;
            dropTarget.setText(dropped.getText().toString());
            break;
        case DragEvent.ACTION_DRAG_ENDED:
            break;
        default:
            break;
        }
        return true;
    }

}

正如您从我的代码中看到的那样,有很多事件,但主要事件是 View 开始被拖放、放下和结束的时间。

不要忘记设置监听器来查看

    tvDrag.setOnTouchListener(new dragTouchListener());
    tvDrop.setOnDragListener(new dropListener())

希望我的解释足够清楚! 如果您还有其他问题,我会在今晚或明天尝试回答 :)

关于android拖放ImageView onTouchListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25055292/

相关文章:

java - 无法构建发布 apk

android - Android 的可靠推送通知

android - 不需要 Seekbar 焦点

android - 如何在kotlin中将imageview转换为bytearray

安卓工作室 : changing imageview weekly

ios - 我如何传递 x 轴和 y 轴以及屏幕的高度和宽度,以便以编程方式快速截取屏幕截图

android - 非法状态异常 : Could not convert SemanticsComponentNode to a View

javascript - 在 Javascript 中拖放以重新排序矩形

iOS11 拖动行为在 UITableView 中不起作用

java - 如何在Java SWT中dragEnter期间获取源组件