我正在开发一个关于加入点和制作图片的Android应用程序。 到目前为止,我无法找到一种方法来提取黑点的精确x和y坐标。因此,我已经对x和y位置进行了硬编码,以便在图像的精确黑点上绘制点。它在 1152 * 720 尺寸上工作得非常好,但是当我在 480 * 600 尺寸上进行测试时出现问题,从确切位置放错了点,现在
我的问题是,如果我写的是:
x = 100, y = 200 (在屏幕1152 * 720上)
不同屏幕尺寸(如480 * 600)的x和y值是多少以及如何计算?我知道这是一个愚蠢的问题,但我对这些东西不熟悉。
答案 0 :(得分:0)
按照你的要求回答你的问题......
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做同样的事。
其他强>
也许你应该重新考虑你的做法
真正的问题是,如果以不同的大小绘制图像,如何将点放在图像上的相同位置。所以忘记测量屏幕尺寸。请改为测量图像尺寸
例如,如果您在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()
将返回0
一旦ImageView实际显示在屏幕上(从onResume()
或更晚),最好调用上面的代码。
答案 1 :(得分:-2)
我这样做了,而学习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) {}
}