Как избежать мигания изображения при сохранении изображения после анимации поворота?

#android #android-animation

#Android #android-анимация

Вопрос:

Я путаю анимацию перевода и анимацию поворота. В моей игре я использую эти две анимации, после завершения анимации я сохраняю свое изображение. В анимации перевода все в порядке, но после завершения анимации поворота мое изображение мигает один раз. Смотрите мой код ниже, пожалуйста, решите мою проблему ……..

Почему кто-то не отвечает на мой вопрос, он не понимает или я задаю какой-то неправильный вопрос? Пожалуйста, скажите мне причину……………..

Спасибо.

 Bitmap bmp=BitmapFactory.decodeResource(getResources(),R.drawable.train); 
//1)
TranslateAnimation TAnimation=new TranslateAnimation(0, 0, 0,-100);//bottom to start
        TAnimation.setInterpolator(new LinearInterpolator());
        TAnimation.setDuration(2000);
        TAnimation.setFillAfter(false);
        TAnimation.setFillEnabled(true);
        //TAnimation.setFillBefore(true);
        Train.startAnimation(TAnimation);

TAnimation.setAnimationListener(new AnimationListener() {

            public void onAnimationStart(Animation animation) {

            }

            public void onAnimationRepeat(Animation animation) {

            }

            public void onAnimationEnd(Animation animation) {

                RelativeLayout RL=(RelativeLayout)findViewById(R.id.rl);
                    param=new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
                param.setMargins(x, y, 0, 0);
                    Train.setLayoutParams(param);
                    Train.setImageBitmap(bmp);       
            }
        });
    //x and y values are exact position of compliting translateanimation position 
//2)
RotateAnimation RAnimation=new RotateAnimation(0,90,50,25);
        RAnimation.setInterpolator(new LinearInterpolator());
        RAnimation.setDuration(2000);
        RAnimation.setFillAfter(false);
        TAnimation.setFillEnabled(true);
        //RAnimation.setFillBefore(true);
        Train.startAnimation(RAnimation);
RAnimation.setAnimationListener(new AnimationListener() {

            public void onAnimationStart(Animation animation) {

            }

            public void onAnimationRepeat(Animation animation) {

            }
            public void onAnimationEnd(Animation animation) {
                RelativeLayout RL=(RelativeLayout)findViewById(R.id.rl);
                    param=new RelativeLayout.LayoutParams( LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
                param.setMargins(x, y, 0, 0);//x and y values are exact position of compliting translateanimation position 
                    Train.setLayoutParams(param);
                    Train.setImageBitmap(bmp);
                }
        });
  

Ответ №1:

у меня была эта проблема, но ее очень просто исправить. Вам не нужно реализовывать прослушиватель анимации, просто не делайте этого (у меня была ваша проблема, потому что я использую этот способ).

Сделайте свою анимацию и перед вызовом метода анимации: setFillAfter(true); // это сохранение вида в конце анимации

Вот так:

 //my animation
final Animation rotation = AnimationUtils.loadAnimation(getActivity(), R.anim.rotate_up);
//hide login content
content.setVisibility(View.GONE);
//animContent = AnimationUtils.loadAnimation(getActivity(), R.anim.show_up);
rotation.setFillAfter(true);
//animate the arrow
arrow.startAnimation(rotation);
  

Итак, удалите прослушиватели и измените setFillAfter(false) на TRUE. Будет работать 😉