我是android新手。我想做ludo游戏。我设置了与这个游戏相关的所有东西。但我希望将TOKEN从一个地方移动到另一个地方,用于不同的屏幕,如(Nexus 6,Samsung Note 5,Moto G3等......)。但问题是每个屏幕尺寸(宽度x高度)都不同。这就是为什么我没有在屏幕上设置正确的x和y位置。我参考了屏幕高度和宽度,以便在屏幕上移动下一个位置(x和y)以在屏幕上移动TOKEN。我正在为Ludo Dashboard拍摄静态图像。这就是为什么我没有得到如何移动的原因。
例如: 我的屏幕如下,
从原点位置到原位: 在这种情况下,每个屏幕的翻译都会改变。因为我正在参考屏幕高度和宽度移动。 该代码如下,
DisplayMetrics displaymetrics = getResources().getDisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
this.constant.Height = displaymetrics.heightPixels;
this.constant.Width = displaymetrics.widthPixels;
private float getheight(float val) {
return (this.constant.Height * val) / 800;
}
private float getwidth(float val) {
return (this.constant.Width * val) / 480;
}
ObjectAnimator animTranslateY = ObjectAnimator.ofFloat(img,
"translationY", blue_1.getY() + getheight(67));
animTranslateY.setDuration(GameConstants.DURATION);
ObjectAnimator animTranslateX = ObjectAnimator.ofFloat(img,
"translationX", blue_1.getX() + getwidth(128));
animTranslateX.setDuration(GameConstants.DURATION);
AnimatorSet anim = new AnimatorSet();
anim.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animator) {
}
@Override
public void onAnimationEnd(Animator animator) {
}
@Override
public void onAnimationCancel(Animator animator) {
}
@Override
public void onAnimationRepeat(Animator animator) {
}
});
anim.play(animTranslateX);
anim.play(animTranslateY);
anim.start();
从Home到Common Rout: 在这种情况下,它的工作正常。对于不同的屏幕,它的移动不同。
所以,我的问题是我如何移动以及移动图像从一个位置到另一个位置的参考。我花了太多时间。请帮帮我。
答案 0 :(得分:0)
所以,我尝试提出一种解决方案,使用简单的单一方法来解决您的问题。我不确定它是否有效,我没有通过实际编码来尝试它!
我假设您已将背景静态图像设置为将其大小(宽度)缩放到屏幕的100%,您的静态图像是正方形(通常是ludo板)。此外,我在考虑屏幕宽度小于屏幕高度。如果是另一种方式,那么交换公式符号。
让
screenH = screen height in pixels;
screenW = screen width in pixels;
bgW = width of staticbackgroundimage in pixels;
bgH = height of staticbackgroundimage in pixels;
现在,如果你想移动' p'背景中的像素静态ludo图像水平然后让我们说你将不得不在屏幕上移动x像素。 x可以按如下方式计算:
x= p*screenW/bgW;
另外,如果你想移动' q'背景中的像素静态ludo图像垂直然后让我们说你将不得不在屏幕上移动y像素。 y可以按如下方式计算:
屏幕上的图像高度将是(以像素为单位):
screenHimage=bgH*screenW/bgW;
y=q*screenHimage/bgH;
因此,如果要在原始图像中移动p和q像素,请在屏幕上移动x和y像素。 我希望这有效。