android拖放ImageView onTouchListener

Pau*_*der 3 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;
        }
    });
Run Code Online (Sandbox Code Playgroud)

Nik*_*ono 7

如果你需要支持姜饼,你可以看看我的例子

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

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

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

有关"拖放"视图的一些解释,首先需要创建触摸侦听器,然后调用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;
            }
        }

    }
Run Code Online (Sandbox Code Playgroud)

要监视丢弃位置的目标,可以使用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;
    }

}
Run Code Online (Sandbox Code Playgroud)

从我的代码中可以看到有很多事件,但主要的是当视图开始被拖动,删除和结束时.

不要忘记将侦听器设置为可查看

    tvDrag.setOnTouchListener(new dragTouchListener());
    tvDrop.setOnDragListener(new dropListener())
Run Code Online (Sandbox Code Playgroud)

我希望我的解释足够清楚!如果你有进一步的问题,我会尽量在今晚或明天回答:)