Android 查找精灵相对于背景图像的位置
有人能告诉我如何找出精灵图像相对于背景图像的相对位置吗?Android 查找精灵相对于背景图像的位置,android,image,scroll,Android,Image,Scroll,有人能告诉我如何找出精灵图像相对于背景图像的相对位置吗? i、 e.平移(滚动)背景时,图像应随背景移动。精灵是背景图像的子对象吗?如果没有,可以使用名为localtoGlobal的方法,该方法将点对象从精灵的(本地)坐标转换为背景的(全局)坐标 一种可能的解决方案是使用虚拟x和y精灵位置,并具有原点x和y位置(位于屏幕左上角) 当您想要滚动屏幕时,只需修改原点x和y位置 然后,无论你在屏幕上画什么,你都需要从虚拟位置减去原点位置 例如 无论何时移动任何精灵,都会操纵其“虚拟”x和y位置。如果通
i、 e.平移(滚动)背景时,图像应随背景移动。精灵是背景图像的子对象吗?如果没有,可以使用名为localtoGlobal的方法,该方法将点对象从精灵的(本地)坐标转换为背景的(全局)坐标
一种可能的解决方案是使用虚拟x和y精灵位置,并具有原点x和y位置(位于屏幕左上角) 当您想要滚动屏幕时,只需修改原点x和y位置 然后,无论你在屏幕上画什么,你都需要从虚拟位置减去原点位置 例如 无论何时移动任何精灵,都会操纵其“虚拟”x和y位置。如果通过减去原点将虚拟的x,y转换为实际的屏幕x,y,所有的东西都会一起移动
现在,例如,如果你想让背景从右向左滚动,你只需将每一帧添加到originX中。好的……为了在滚动时使精灵与背景一起移动, 代码是: 初始化
PointF touchStart = new PointF();
PointF picStart = new PointF();
PointF prevPicStart = new PointF();
并在onTouchEvent()方法中实现:
这被标记为android问题。是否修改原点X和Y?这不会从那一点重新画出整个画面吗?这个例子会很有帮助。是的,它会重新绘制整个图像,这是滚动背景的基础。
PointF touchStart = new PointF();
PointF picStart = new PointF();
PointF prevPicStart = new PointF();
@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 - BG_image.getWidth() + ActivityClass.DISP_WIDTH)) {
picStart.x = newX;
}
if ((newY <= 0 && newY > 0 - BG_image.getHeight() + ActivityClass.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_l1, picStart.x, picStart.y, paint);
canvas.translate(picStart.x, picStart.y);
person.draw(canvas);
}