2015-07-05 1 views
0

Я разрабатываю приложение для Android, о соединении точек и создании изображения. до сих пор я не могу найти способ извлечь точные координаты x и y черных точек. поэтому я жестко закодировал x и y, чтобы нарисовать точку на точной черной точке изображения. Он работал прекрасно на 1152 * 720 размера, но проблема возникает, когда я тестировал на 480 * 600 размера, точек неуместны оттуда точного местоположение, теперьЕсть ли способ предсказать местоположение x и y с одного экрана на другой?

мой вопрос, если я написал что-то вроде :

х = 100, у = 200 (на экране 1152 * 720)

что будет й и у значений в различных размерах экрана, как 480 * 600 и, как вычислить его? Я знаю, что это глупый вопрос, но я новичок в этом.

+0

1152 -480 = x; поэтому ваше новое местоположение будет x = (x + 100) -viewwidth; .. это хорошо для вас? – Elltz

ответ

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 

Сделайте то же самое для у.


Дополнительно:

Возможно, вам следует пересмотреть свой подход.
Настоящая проблема заключается в том, как положить точку в том же месте на Изображение, если Изображение рисуется в другом размере. Поэтому забудьте об измерении размера экрана. Измените размер изображения.
Например, если вы показываете свое изображение в 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() или новее).

+0

Как я могу получить значения oldScreenSizeX, oldScreenSizeY в android внутри кода? –

+0

Теперь я получаю благодарность. –

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

} 
+1

Как именно это отвечает на вопрос ОФ? Вопрос состоял в том, чтобы связать позиции x/y от размера экрана до размера экрана, не имея возможности щелкнуть и найти координаты. –

Смежные вопросы