android画布用鬼画形状

时间:2016-07-23 13:50:59

标签: android canvas

我正在尝试创建一个简单的绘图应用程序,用户可以按下自定义视图的一个点并拖动它来创建一个矩形或一个圆圈,我设法很容易做到。

当我尝试向用户显示随着它变大或变小时移动形状的进度时出现问题。

要解释它,如果您在桌面上单击并拖动鼠标,我希望获得与Windows相同的效果。

这是我的onTouchEvent方法,我该怎么做?

if (chosenShape.equals("rectangle")) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN: // user start pressing
            //starting point - one side of the rect
            starting_X = touchX;
            starting_Y = touchY;
            break;
        case MotionEvent.ACTION_MOVE: // user move while pressing

            break;
        case MotionEvent.ACTION_UP: // user release
            //ending point - thie side of the circle
            ending_X = touchX;
            ending_Y = touchY;
            // draw the rectangle - opposite side of the rect
            drawCanvas.drawRect(starting_X, starting_Y, ending_X, ending_Y, drawPaint);
            chosenShape = ""; // reseting the shape to keep drawing
            break;
        default:
            return false;

    }
} else {
    switch (event.getAction()) {

        case MotionEvent.ACTION_DOWN:
            drawPath.moveTo(touchX, touchY);
            break;
        case MotionEvent.ACTION_MOVE:
            drawPath.lineTo(touchX, touchY);
            break;
        case MotionEvent.ACTION_UP:
            drawCanvas.drawPath(drawPath, drawPaint);
            drawPath.reset();
            break;
        default:
            return false;
    }
}

1 个答案:

答案 0 :(得分:1)

case MotionEvent.ACTION_MOVE:中,您需要设置ending_Xending_Y值。

更好的是跟踪intermediate_xintermediate_y,以便您可以绘制不同的效果,例如虚线而不是实线。

您可能最好存储用户绘制的所有形状,并在每次触摸事件进入时刷新画布,否则当您拖动广告时,您将获得彼此绘制的形状,它们将不会被清除。