canvas坐标转换屏幕坐标_java-Android屏幕坐标到画布视图坐标

我正在尝试将屏幕的x和y坐标转换为用于在屏幕上绘制的坐标.

因此,我从由触摸侦听器触发的MotionEvent获取屏幕X和Y坐标.

我认为这应该与将其乘以用于在画布上绘制的矩阵一样容易,所以我在创建视图时创建了Matrix实例

matrix = new Matrix();

当调用void onDraw(Canvas canvas)时,我将canvas的矩阵设置为在构造函数上创建的矩阵,并将所有转换应用于该矩阵

matrix.reset();

canvas.setMatrix(matrix);

canvas.translate(getWidth() / 2, getHeight() / 2);

canvas.scale(mScaleFactor, mScaleFactor);

canvas.translate(-getWidth() / 2, -getHeight() / 2);

canvas.translate(-x, -y);

该视图看起来应该是正确的,但是当我在触摸监听器上尝试使用mapPoints(float [] points)旋转屏幕坐标以查看具有该矩阵的坐标时,它给出的值不正确,我在0、0 onDraw

canvas.drawLine(0f, -100f, 0f, 100f, viewportPaint);

canvas.drawLine(-100f, 0f, 100, 0f, viewportPaint);

当我单击缩放后的位置时,我收到的值甚至不接近0、0

float[] array = new float[]{e.getX(), e.getY()};

matrix.mapPoints(array);

Log.v(TAG, "points transformed are " + array[0] + ", " + array[1]);

当我在这张照片上清楚地单击0、0标记时,收到以下日志记录:

03-09 14:08:48.803: V/XXXX(22181): points transformed are 403.43967, 628.47

附言我没有在onDraw代码中触摸矩阵

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现星图的输出,可以使用Java的图形库,例如JavaFX或Swing来绘制星图。 下面是一个简单的示例代码,可以根据输入的坐标和时间,快速更改星图视图: ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.layout.StackPane; import javafx.stage.Stage; public class StarMap extends Application { // 坐标和时间 private double x; private double y; private long time; @Override public void start(Stage primaryStage) { // 创建画布 Canvas canvas = new Canvas(800, 600); GraphicsContext gc = canvas.getGraphicsContext2D(); // 绘制星图 drawStarMap(gc, x, y, time); // 创建场景 StackPane root = new StackPane(); root.getChildren().add(canvas); Scene scene = new Scene(root, 800, 600); primaryStage.setTitle("Star Map"); primaryStage.setScene(scene); primaryStage.show(); } // 绘制星图的方法 private void drawStarMap(GraphicsContext gc, double x, double y, long time) { // TODO: 根据坐标和时间计算星图视图 // 清空画布 gc.clearRect(0, 0, gc.getCanvas().getWidth(), gc.getCanvas().getHeight()); // 绘制星图 gc.strokeLine(0, 0, gc.getCanvas().getWidth(), gc.getCanvas().getHeight()); gc.strokeLine(0, gc.getCanvas().getHeight(), gc.getCanvas().getWidth(), 0); gc.strokeOval(gc.getCanvas().getWidth() / 2 - 50, gc.getCanvas().getHeight() / 2 - 50, 100, 100); } // 设置坐标和时间的方法 public void setCoordinate(double x, double y) { this.x = x; this.y = y; } public void setTime(long time) { this.time = time; } public static void main(String[] args) { launch(args); } } ``` 在上面的示例代码中,`setCoordinate`方法和`setTime`方法用于设置坐标和时间,`drawStarMap`方法用于根据坐标和时间计算星图视图并绘制星图。在`start`方法中创建画布并调用`drawStarMap`方法绘制星图,然后将画布添加到场景中并显示场景。 你可以根据实际需求修改`drawStarMap`方法来计算和绘制星图视图

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值