繁体   English   中英

Android-如何在画布上拖动图片

[英]Android- How to drag a picture on a canvas

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

拖动前的图片:

拖动前的图像

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

拖动后的图像

我不知道怎么做这个“拖累效应”,有人可以帮帮我吗? 这不是作为.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;   
}

drawRectagle代码:

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();              
}

任何解决方案都会被贬低。 谢谢!

看看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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM