繁体   English   中英

Android:在不同坐标系中进行画布缩放

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM