Android保存坐标画布Drawcircle并在不同设备上显示

时间:2017-03-29 12:20:04

标签: java android android-canvas

class Draw extends View {
    private Paint mPaint;
    public Button mCircles;

    DrawFragment mDrawFragment;
    private Circle mCurrentCircle;
    private List<Circle> mCircle= new ArrayList<>();

    public Draw(Context context){
        this(context,null);
    }

    public Draw(Context context, AttributeSet attrs) {
        super(context, attrs);

        mPaint=new Paint();
        mPaint.setColor(Color.RED);
        mPaint.setAlpha(80);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        for (Circle circle : mCircle) {
            float x1 = circle.getCenter().x;
            float x2 = circle.getFinal().x;
            float y1 = circle.getCenter().y;
            float y2 = circle.getFinal().y;

            double radius = Math.sqrt(Math.pow(dpx1 - dpx2, 2) + Math.pow(dpy1 - dpy2, 2));

            float rad = (float) radius;

            canvas.drawCircle(dpx1, dpy1, rad, mPaint);
        }

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mCurrentCircle = new Circle(current);
                mCircle.add(mCurrentCircle);
                break;

            case MotionEvent.ACTION_MOVE:
                if (mCurrentCircle != null) {
                    mCurrentCircle.setFinal(current);
                    invalidate();
                }
                break;

            case MotionEvent.ACTION_UP:
                mCurrentCircle = null;
                invalidate();  break;
        }

    }

    Log.i(TAG, "onTouchEvent: at x="+current.x + ", y =" + current.y);

    return true;
}

1.我正在保存在画布上绘制的圆圈的这些坐标,这是为了标记汽车上的损坏。             但是当我使用这些值显示在更大的设备上时,圆圈位置并不完整..可以做什么?

1 个答案:

答案 0 :(得分:1)

所有坐标都参考设备,屏幕由像素和每英寸像素确定。

  • 如果您希望在其他设备上使用相同的信息,您必须设置一种适合您的锚点作为参考。
  • 例如,如果这些圆圈将被绘制在汽车的背景图像上,您应该能够将主题引用到该图片的位置。
  • 使用该信息,在任何其他设备上,您应该能够根据设备未引用坐标但是引用汽车图像的事实在任何设备上重绘这些圆圈。

我希望这有助于您重新思考问题。