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

时间:2014-02-26 12:01:15

标签: java android android-canvas draw

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

拖动前的图片:

Image before drag

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

Image after drag

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

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

1 个答案:

答案 0 :(得分:2)

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