【问题标题】:Android- How to drag a picture on a canvasAndroid-如何在画布上拖动图片
【发布时间】:2014-02-26 12:01:15
【问题描述】:

我需要像在电子游戏中一样拖动图像。我画了几条线,我需要拖动它并查看在“出”窗口之前绘制的线。我给你两张图片试图帮助你理解它。

拖动前的图像:

然后我用手指触摸屏幕并移动到屏幕顶部,所以这三行必须高于初始图像,如下所示:

我不知道如何做这种“拖曳效应”,有人可以帮我吗?这不是 .jpg 文件形式的图像,是在画布上用“drawLine”绘制的三行到 imageView。

我的 onTouchEvent 代码和我的 drawRectangle 代码:

public boolean onTouch(View view, MotionEvent event) 
{
     switch (event.getAction()) 
     {      
        case MotionEvent.ACTION_UP: 
        {
            x = event.getX();
            y = event.getY();

            getFirstFoot();
            return true;
        }
        case MotionEvent.ACTION_MOVE:
        {
            ammountX = event.getX() - startX;
            ammountY = event.getY() - startY;

            canvas.save();
            canvas.translate(ammountX, ammountY);
            //canvas.restore();

            imageView.invalidate();

            return true;    
        }           
        case MotionEvent.ACTION_DOWN:
        {
            startX = event.getX();
            startY = event.getY();
        }
     }      
     return true;   
}

绘制矩形代码:

private void drawRectangle(boolean erase)
{
    buttonRed.setVisibility(View.VISIBLE);
    buttonGree.setVisibility(View.VISIBLE);
    buttonYellow.setVisibility(View.VISIBLE);


    Bitmap bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.ascensorsininfo);
    canvas.drawBitmap(bitmap2, x - (bitmap2.getWidth() / 2), y - bitmap2.getHeight(), new Paint());

    drawedPoints.add(String.valueOf(x - (bitmap2.getWidth() / 2)));
    drawedPoints.add(String.valueOf(y - bitmap2.getHeight()));

    imageView.invalidate();

    y -= bitmap2.getHeight();              
}

我们将不胜感激任何解决方案。谢谢!

【问题讨论】:

    标签: java android android-canvas draw


    【解决方案1】:

    查看Canvas.translate

    它会“移动”你在 x 和 y 轴上绘制的所有内容。

    不要忘记保存和恢复它,例如:

    canvas.save();
    canvas.translate(ammountX, ammountY);
    // [draw your stuff here]
    canvas.restore();
    

    如果您的问题更多是关于如何检测拖动效果,您必须重写视图的 onTouchEvent 方法。比如:

    @Override
    public boolean onTouchEvent (MotionEvent event){
        if(event.getActionMasked() == MotionEvent.DOWN){
            startX = event.getX();
            startY = event.getY();
            return true;
        }else if(event.getActionMasked() == MotionEvent.MOVE){
            ammountX = event.getX() - startX;
            ammountY = event.getY() - startY;
            return true;
        }
        return super.onTouchEvent(event);
    }
    

    【讨论】:

    • 此代码对我的应用程序没有任何作用。我将我的代码添加到我的问题中,你可以看到它。可能我做错了。感谢您的快速答复!
    • 如我所见,我没有很好地解释它。您必须覆盖您的ViewonTouchEvent(MotionEvent event) 方法,每次用户触摸屏幕时Android 系统都会调用该方法。通常,您会在具有画布的视图中覆盖它。然后 canvas.save() .translate().restore() 在有触摸事件时不要放置它们,但每次你想在画布上绘制东西时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    相关资源
    最近更新 更多