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"?

Другие вопросы по тегам