Отвечая на ваш вопрос, как вы попросили его ...
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
Сделайте то же самое для у.
Дополнительно:
Возможно, вам следует пересмотреть свой подход.
Настоящая проблема заключается в том, как положить точку в том же месте на Изображение, если Изображение рисуется в другом размере. Поэтому забудьте об измерении размера экрана. Измените размер изображения.
Например, если вы показываете свое изображение в 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()
или новее).
1152 -480 = x; поэтому ваше новое местоположение будет x = (x + 100) -viewwidth; .. это хорошо для вас? – Elltz