有没有办法预测从一种屏幕尺寸到另一种屏幕尺寸的 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) {}
}
我正在开发一个 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) {}
}