[英]Android: Canvas scaling in different coordinate system
我有点绝望了=)...
我正在Android的画布上绘制点和线。 我要显示的点应在数学系统中显示。 所以我做了canvas.getHeight()-point.y以正确的方式显示点。
但是,如果我想放大绘制的对象,则y坐标会从我的视图中缩小。 那是因为x = 10且y =700。如果我使用10的比例因子对其进行缩放,则y使对象消失。 我希望你明白我在说什么...
如何在不移动y坐标的情况下以正确的(数学)方式显示坐标?
这是我的工作:
canvas.drawPoint(startPoints[i][0], height-startPoints[i][1], pointColor);
canvas.drawPoint(endPoints[i][0], height-endPoints[i][1], pointColor);
然后我的点(x = 10,y = 10)将显示为x = 10,y = 714。
这是我的全部行程
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
final float[][] startPoints;
final float[][] endPoints;
int count = 0;
height = canvas.getHeight();
canvas.save();
canvas.scale(scaleFactor, scaleFactor);
canvas.translate(translateX / scaleFactor, translateY / scaleFactor);
Paint lineColor = new Paint();
lineColor.setColor(Color.BLACK);
Paint pointColor = new Paint();
pointColor.setColor(Color.RED);
pointColor.setStrokeWidth(5f);
startPoints = data.getStartPoints();
endPoints = data.getEndPoints();
count = data.getSize();
for (int i = 0; i < count; i++) {
canvas.drawLine(startPoints[i][0], height-startPoints[i][1],
endPoints[i][0], height-endPoints[i][1], lineColor);
canvas.drawPoint(startPoints[i][0], height-startPoints[i][1], pointColor);
canvas.drawPoint(endPoints[i][0], height-endPoints[i][1], pointColor);
}
canvas.restore();
}
private class ScaleListener extends
ScaleGestureDetector.SimpleOnScaleGestureListener {
@Override
public boolean onScale(ScaleGestureDetector detector) {
scaleFactor *= detector.getScaleFactor();
scaleFactor = Math.max(MIN_ZOOM, Math.min(scaleFactor, MAX_ZOOM));
return true;
}
}
缩放系数x =屏幕宽度(以像素为单位)/目标宽度(以像素为单位)
缩放系数y =屏幕高度(以像素为单位)/目标高度(以像素为单位)
要么
缩放后的x点=调整大小后的画布上的x *(调整大小后的宽度/原始宽度)
缩放后的y点=调整后的画布上的y *(调整后的高度/原始高度)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.