Есть ли способ получить координаты сенсорного события на прокручиваемой карте?
Значение, когда я касаюсь в одной точке экрана, getX()
и getY()
возвращает соответствующие значения, а затем, когда я просматриваю карту, возвращаемые координаты должны относиться к карте, а не к экрану.
например. У меня есть карта 750x750, а размер экрана моего устройства - 480x800.
когда я впервые коснусь, скажем, что возвращаемые координаты (100, 200). теперь, когда я просматриваю карту и касаюсь где-то еще, я получаю координаты как 200, 200.
Я хочу получить координаты относительно карты, а не экрана.
Я пытался понять это в течение долгого времени, и зря потратил сеть и другие сайты.
Пожалуйста, помогите.
спасибо заранее
\ Т /
Мне нужны координаты coz Я разрабатываю игру, в которой у меня есть большая карта и объекты, размещенные на ней. когда я просматриваю карту, мне нужно, чтобы объекты перемещались вместе в одном и том же положении. вот мой код:
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
touchStart.set(ev.getX(), ev.getY());
x = ev.getX();
y = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
newX = ev.getX() - touchStart.x + prevPicStart.x;
newY = ev.getY() - touchStart.y + prevPicStart.y;
if ((newX <= 0 && newX > 0 - mBG.getWidth() + Craz.DISP_WIDTH)) {
picStart.x = newX;
}
if ((newY <= 0 && newY > 0 - mBG.getHeight() + Craz.DISP_HEIGHT)) {
picStart.y = newY;
}
invalidate();
break;
case MotionEvent.ACTION_UP:
prevPicStart.x = picStart.x;
prevPicStart.y = picStart.y;
break;
}
return true;
}
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
canvas.drawBitmap(mBG, picStart.x, picStart.y, paint);
canvas.translate(picStart.x, picStart.y);
mBDoor.draw(canvas);
}
Его довольно легко. Когда вы прокручиваете карту, у вас есть смещение. Если вы перейдете вправо (фон переместится влево), ваше смещение будет отрицательным. Допустим, у вас есть смещение по x от -50, и вы нажимаете координаты экрана 100, вы просто выполняете математику:
mapCoordX = screenX - offsetX; // makes: 100 - (-50) = 150
просто глядя на координату X, для Y это должно быть одно и то же.
Я написал учебник о карте плиток и прокрутке над ней. Возможно, вы тоже посмотрите на него.
псевдокод!
for (int id = 0; id < mapSize; id++) {
Tile tile = new Tile(id);
startX = id * tileWidth;
startY = id % rowLenght + id / rowLenght;
tile.setBackground(createCroppedBitmap(background, startX, startY));
}
scrollTo()
/scrollBy()
? Вы можете просто добавить значенияgetScroll*()
к экранным координатам.