有没有办法预测从一种屏幕尺寸到另一种屏幕尺寸的 x 和 y 位置?

Is There any way to Predict x and y location from one screen size to another?

我正在开发一个 android 应用程序,关于连接点和制作图片。 到目前为止,我找不到一种方法来提取黑点的精确 x 和 y 坐标。所以我对 x 和 y 位置进行了硬编码,以在图像的确切黑点上绘制点。它在 1152*720 大小上工作得很好,但是当我在 480*600 大小上测试它时出现问题, 点错位了那里有确切的位置,现在

我的问题是我是否写过类似的东西:

x = 100 , y = 200 (屏幕1152*720)

不同屏幕尺寸(如 480*600)下的 x 和 y 值是多少以及如何计算它?我知道这是个愚蠢的问题,但我是新手。

正在回答您提出的问题...

int oldScreenX // The current x coord
int newScreenX // The new x coord
...
float oldScreenSizeX = 1152.0f;
float newScreenSizeX = 600.0f;
newScreenX = (int)(oldScreenX / oldScreenSizeX) * newScreenSizeX; // Remember to cast the result back to an int

对 y 做同样的事情。


补充:

也许你应该重新考虑你的方法。
真正的问题是,如果 Image 以不同的尺寸绘制,您如何将点放在 Image 上的相同位置。所以忘记测量屏幕尺寸。改为测量图像尺寸。
例如,如果您在 ImageView 中显示图像,您可以编写如下通用缩放方法:

public int scaleCoordinate(int unscaledImageSize, int scaledImageSize, int unscaledCoordinate) {
    scaledCoordinate = (int)(unscaledCoordinate / unscaledImageSize) * scaledImageSize; // Remember to cast the result back to an int
    return scaledCoordinate;
}

然后你可以在你的代码中使用它,比如:

ImageView imageView = (ImageView)findViewById(R.id.my_imageview);
Drawable drawable = image.getDrawable();

// Get the original size of the bitmap
int unscaledSizeX = drawable.getIntrinsicWidth();

// Get the current size it is being drawn at on the screen
int scaledSizeX = imageView.getWidth();

int scaledCoordinateX = scaleCoordinate(unscaledSizeX, scaledSizeX, unscaledCoordinateX);

注意:
ImageView需要系统在调用上述代码前进行测量和布局。如果你调用它太早 imageView.getWidth() 将 return 0.
最好在 ImageView 实际显示在屏幕上后调用上面的代码(从您的 onResume() 或更高版本)。

这个是我做的,学习的时候java可能对你有帮助

import java.applet.Applet;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;


public class DrawLineOnGivenLocations extends Applet implements          MouseListener, MouseMotionListener{


int x1 = 0, y1 = 0, x2 = 0, y2 = 0; 

public void init() {
    addMouseListener(this);
    addMouseMotionListener(this);
}

public void mouseMoved(MouseEvent me) {

    // show status
    showStatus("Moving mouse at " + me.getX() + ", " + me.getY());
}

public void mouseClicked(MouseEvent me) {
    // save coordinates
    x1 = me.getX();
    y1 = me.getY();
    x2 = me.getX();
    y2 = me.getY();

    repaint();

}
public void paint(Graphics g){

    g.drawLine(x1,y1 ,x2, y2);

}

public void mouseEntered(MouseEvent arg0) {}
public void mouseDragged(MouseEvent arg0) {}
public void mouseExited(MouseEvent arg0) {}
public void mousePressed(MouseEvent arg0) {
    //repaint();
}
public void mouseReleased(MouseEvent arg0) {}

}