Android 如何拖动和绘制线?

Android 如何拖动和绘制线?,android,motionevent,Android,Motionevent,我是android编程新手,我创建了一个应用程序来绘制矩形和圆形。现在我想画椭圆和直线。我知道抽绳取起点x,起点y,终点x和终点y 这是我在mycustomView.java中尝试的,但我只能从左上到右下和从右下到左上拖动行?如何使其适用于所有方向 protected void onDraw(Canvas canvas) { this.canvas = canvas; canvas.drawColor(Color.WHITE); for (int i = 0; i

我是android编程新手,我创建了一个应用程序来绘制矩形和圆形。现在我想画椭圆和直线。我知道抽绳取起点x,起点y,终点x和终点y

这是我在mycustomView.java中尝试的,但我只能从左上到右下和从右下到左上拖动行?如何使其适用于所有方向

 protected void onDraw(Canvas canvas) {
    this.canvas = canvas;

    canvas.drawColor(Color.WHITE);

    for (int i = 0; i < numberShapes; i++) {
        paint.setColor(Color.parseColor("#" + Integer.toHexString(Integer.parseInt(shapes[i].getColor())).substring(2))); //avoids alpha
        paint.setStrokeWidth(shapes[i].getBorder());
         //some code here....

                    else if(shapes[i].getShapeType().equals("Ellipse")){
            RectF rect= new RectF(shapes[i].getX(),shapes[i].getY(),shapes[i].getX() + shapes[i].getWidth(),shapes[i].getY() + shapes[i].getHeight());
            canvas.drawOval(rect,paint);

        }
        else if(shapes[i].getShapeType().equals("StraightLine")){
           canvas.drawLine(shapes[i].getX(),shapes[i].getY(),shapes[i].getX() + shapes[i].getWidth(),shapes[i].getY() + shapes[i].getWidth(),paint);
        }
    }

}
}

以下是您可以尝试的:

public boolean onTouch(View v, MotionEvent event) {
        switch(event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                startX = event.getRawX();
                startY = event.getRawY();
                break;

            case MotionEvent.ACTION_UP:
                Paint paint = new Paint(); 
                paint.setStrokeWidth(10f);
                paint.setColor(getResources().getColor(R.color.text_red));
                canvas.drawLine(startX, startY, event.getRawX(), event.getRawY(), paint);
                break;
        }
    }

好吧,我在画布上把这个复杂化了一点。抽绳我应该这样做:

else if(shapes[i].getShapeType().equals("StraightLine")){
    canvas.drawLine(shapes[i].getX(), shapes[i].getY(), shapes[i].getWidth(), shapes[i].getHeight(), paint);
}
if ((selectedShapeDrawing.equals("StraightLine"))) {
    storeShape(selectedShapeDrawing,mLastTouchX,mLastTouchY,x,y); 
}
在我的行动中,我应该这样做:

else if(shapes[i].getShapeType().equals("StraightLine")){
    canvas.drawLine(shapes[i].getX(), shapes[i].getY(), shapes[i].getWidth(), shapes[i].getHeight(), paint);
}
if ((selectedShapeDrawing.equals("StraightLine"))) {
    storeShape(selectedShapeDrawing,mLastTouchX,mLastTouchY,x,y); 
}

参考:什么是storeshape?它存储所选形状的半径、高度等