android 多个设备的动画视图

android animationing views for multiple devices

我的应用程序中有一个小游戏,如果你得到一些正确的东西,气球会在屏幕上浮动,气球是由动画集中的 2 个 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

我读过我可以使用分数而不是明确的值,任何人都可以帮助我解决这个问题或指出正确的方向, 欢迎提出任何建议,非常感谢

我猜你的问题出在你使用的参数上(硬编码),比如:

ObjectAnimator.ofFloat(sb,"x",-500,500);
ObjectAnimator.ofFloat(sb,"y",2000,-1800);

因为这些值仅适用于您正在测试的设备(实际上是屏幕)。其他设备有其他分辨率的其他屏幕,您应该考虑一下。你也应该计算从 dp 到像素的值。 500和2000到底是多少?如果它的像素很可能就是问题所在。
看这里(dp 到 px):
What is the difference between "px", "dp", "dip" and "sp" on Android?
Android: 'dp' to 'px' conversion?