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

时间:2015-07-05 00:21:05

标签: android image android-layout android-screen

我正在开发一个关于加入点和制作图片的Android应用程序。 到目前为止,我无法找到一种方法来提取黑点的精确x和y坐标。因此,我已经对x和y位置进行了硬编码,以便在图像的精确黑点上绘制点。它在 1152 * 720 尺寸上工作得非常好,但是当我在 480 * 600 尺寸上进行测试时出现问题,从确切位置放错了点,现在

我的问题是,如果我写的是:

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

不同屏幕尺寸(如480 * 600)的x和y值是多少以及如何计算?我知道这是一个愚蠢的问题,但我对这些东西不熟悉。

2 个答案:

答案 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) {}

}