如何将画布中的特定项目拖放到布局中

时间:2018-07-04 07:09:13

标签: android drag-and-drop android-canvas shapes

在我的布局中,FrameLayout中有一个绘图视图。当我尝试创建画布形状时,会创建它们,但是我需要将特定的画布项目拖到另一个位置。 我看到了这么多的链接,其中包括图像的相对布局的拖放操作,但是FrameLayout没有解决方案。

XML:-

<FrameLayout
    android:id="@+id/wholeFrameLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black">

    <com.editing.canvas.library.util.CustomImageView
        android:id="@+id/imgMainPlaceholder"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitXY" />

        <com.editing.canvas.library.views.DrawingView
            android:id="@+id/drawingViewAll"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

</FrameLayout>

代码:-

 FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(150, 150);
                mDrawingView.setLayoutParams(layoutParams);
                mDrawingView.setOnTouchListener(ShapeDrawingActivity.this);

我正在使用上面的代码进行拖放,但是对我不起作用

  @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        final int X = (int) motionEvent.getRawX();
        final int Y = (int) motionEvent.getRawY();
        switch (motionEvent.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                FrameLayout.LayoutParams lParams = (FrameLayout.LayoutParams) view.getLayoutParams();
                _xDelta = X - lParams.leftMargin;
                _yDelta = Y - lParams.topMargin;
                break;
            case MotionEvent.ACTION_UP:
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                break;
            case MotionEvent.ACTION_POINTER_UP:
                break;
            case MotionEvent.ACTION_MOVE:
                FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) view
                        .getLayoutParams();
                layoutParams.leftMargin = X - _xDelta;
                layoutParams.topMargin = Y - _yDelta;
                layoutParams.rightMargin = -250;
                layoutParams.bottomMargin = -250;
                view.setLayoutParams(layoutParams);
                break;
        }

        mRrootLayout.invalidate();
        return true;
    }

建议/示例/链接将不胜感激。

0 个答案:

没有答案