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.我正在保存在 Canvas 上绘制的这些圆圈的坐标,这是为了标记汽车上的损坏情况。 但是当我使用这些值在更大的设备上显示时,圆圈位置不完整..可以做什么?
最佳答案
所有坐标均引用具有由像素和每英寸像素确定的屏幕的设备。
- 如果您希望在不同的设备上使用相同的信息,则必须设置一种适合您的 anchor 作为引用。
- 例如,如果这些圆圈将绘制在汽车的背景图像上,您应该能够将主题引用到该图片的位置。
- 有了这些信息,您应该能够在任何其他设备上重新绘制这些圆圈,因为坐标不是引用设备,而是引用汽车图像。
我希望这可以帮助您重新思考这个问题。
关于java - Android保存坐标 Canvas 绘制圆并在不同设备上显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43093348/