android animationing views for multiple devices

非 Y 不嫁゛ 提交于 2019-12-25 03:42:06

问题


I have a small game in my application, if you get something right balloons float up the screen, the balloons are views moved by 2 ObjectAnimators in an animation set, and on my main debugging device it works fine but on other devices (including tablets) it looks aweful the values are all over the place and the views violently sway from one side to the next. here is a snippet of what im doing:

//2 square balloons floating

            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);

//left balloon

            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();

//right balloon

            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();

//balloon animation end

            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

ive read i can use a fraction rather than explicit values, can anybody help me out with this or point in the right direction, any and all suggestions welcome, many thanks


回答1:


I guess your problem is in parameters you are using (hardcoding) like:

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

Since such values are only good for the device (screen actually) you are testing on. Other devices has other screens with other resolutions and you should consider it. Also you should maybe calc values from dp to pixels. What are 500 and 2000 actually? If its pixels then most probably thats the problem.
Take a look here (for dp to px):
What is the difference between "px", "dp", "dip" and "sp" on Android?
Android: 'dp' to 'px' conversion?



来源:https://stackoverflow.com/questions/29394458/android-animationing-views-for-multiple-devices

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!