Android-анимация просмотров для нескольких устройств
У меня есть небольшая игра в моем приложении, если вы получаете что-то правильное, всплывают шарики на экране, шарики - это виды, перемещенные двумя ObjectAnimators в наборе анимации, и на моем основном отладочном устройстве это работает нормально, но на других устройствах (включая планшеты) это выглядит ужасно, ценности повсюду, и взгляды сильно колеблются от одной стороны к другой. вот фрагмент того, что я делаю:
// плавающие 2 квадратных шара
sb = (ImageView)findViewById(R.id.squareballoon);
sb.setVisibility(View.VISIBLE);
sb2 = (ImageView)findViewById(R.id.squareballoon2);
sb2.setVisibility(View.VISIBLE);
sp.play(inflate, 1, 1, 0, 0, 1);
// левый шарик
ObjectAnimator sqbalAnim3 = ObjectAnimator.ofFloat(sb,"x",-500,500);
sqbalAnim3.setDuration(700);
sqbalAnim3.setRepeatCount(5);
sqbalAnim3.setRepeatMode(ValueAnimator.REVERSE);
ObjectAnimator sqbalAnim = ObjectAnimator.ofFloat(sb,"y",2000,-1800);
sqbalAnim.setDuration(3000);
sqbalAnim.setRepeatMode(ValueAnimator.RESTART);
AnimatorSet animSetXY = new AnimatorSet();
animSetXY.playTogether(sqbalAnim, sqbalAnim3);
animSetXY.start();
// правый шарик
ObjectAnimator sqbalAnim4 = ObjectAnimator.ofFloat(findViewById(R.id.squareballoon2),"x",-1500,-500);
sqbalAnim4.setDuration(700);
sqbalAnim4.setRepeatCount(5);
sqbalAnim4.setRepeatMode(ValueAnimator.REVERSE);
ObjectAnimator sqbal2Anim = ObjectAnimator.ofFloat(findViewById(R.id.squareballoon2),"y",1800,-1800);
sqbal2Anim.setDuration(3000);
sqbal2Anim.setRepeatMode(ValueAnimator.RESTART);
AnimatorSet animSetXY2 = new AnimatorSet();
animSetXY2.playTogether(sqbal2Anim,sqbalAnim4);
animSetXY2.start();
// конец анимации
animSetXY2.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
sp.play(dropSound,1,1,0,0,1);
sb.setBackgroundResource(R.drawable.burst);
pop = (AnimationDrawable) sb.getBackground();
pop.start();
sb2.setBackgroundResource(R.drawable.burst);
pop = (AnimationDrawable) sb2.getBackground();
pop.start();
}
});
return true;}
//end of square balloons
Я читал, я могу использовать дробные, а не явные значения, кто-нибудь может мне помочь с этим или указать в правильном направлении, любые предложения приветствуются, большое спасибо
1 ответ
Я думаю, что ваша проблема в параметрах, которые вы используете (жесткое кодирование), как:
ObjectAnimator.ofFloat(sb,"x",-500,500);
ObjectAnimator.ofFloat(sb,"y",2000,-1800);
Поскольку такие значения хороши только для устройства (на самом деле экрана), на котором вы тестируете. Другие устройства имеют другие экраны с другими разрешениями, и вы должны учитывать это. Также вам следует вычислить значения от dp до пикселей. Что такое 500 и 2000 на самом деле? Если его пиксели, то, скорее всего, это проблема.
Посмотрите здесь (для dp to px):
В чем разница между "px", "dp", "dip" и "sp" на Android?
Android: преобразование "dp" в "px"?