Android анимирует за пределами экрана, затем анимирует снова на

#android #animation

#Android #Анимация

Вопрос:

У меня есть код, который заставляет изображение анимироваться слева от экрана, затем я хочу, чтобы изображение анимировалось прямо на экране позже. Но когда приходит время снова включить анимацию перед тем, как она отобразится на экране, она мигает в своем последнем месте, а затем переходит и анимируется на экране.

xml нравится вот так:

 animate on
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:fillAfter="true">

<translate
    android:fromXDelta="-50%p"
    android:toXDelta="0%p"
    android:duration="800" />
</set>

animate off

<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator"
android:fillAfter="true">

<translate
    android:fromXDelta="0%p"
    android:toXDelta="-50%p"
    android:duration="800" />
</set>




java code
        mEditMessage.addTextChangedListener(new TextWatcher() {

        @Override
        public void afterTextChanged(Editable s) {
            if (mEditMessage.getText().length()==0){
                Animation fade_in = AnimationUtils.loadAnimation(MessageActivity.this, R.anim.move_right_onto_screen);
                AnimationSet animateIn = new AnimationSet(false);
                animateIn.addAnimation(fade_in);

                animateIn.setFillAfter(true);
                mIvAttachment.startAnimation(animateIn);
                mIvAudio.startAnimation(animateIn);


            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start,
                                      int count, int after) {
            if (mEditMessage.getText().length()==0){
                Animation fade_out = AnimationUtils.loadAnimation(MessageActivity.this, R.anim.move_left_off_screen);
                AnimationSet animate = new AnimationSet(false);

                animate.addAnimation(fade_out);

                animate.setFillAfter(true);
                mIvAttachment.startAnimation(animate);
                mIvAudio.startAnimation(animate);



            }
        }

        @Override
        public void onTextChanged(CharSequence s, int start,
                                  int before, int count) {

        }
    });
  

Комментарии:

1. Пользовательский класс TranslateAnimation для этого. Это лучше, поскольку оно будет вычислять размеры во время выполнения. Это легко понять и применить, прочтите это .

2. спасибо, я посмотрю!

3. Это часть ObjectAnimator, так что вы можете сначала взглянуть на это.

4. спасибо, что выглядело отлично, знаете ли вы какие-либо похожие методы анимации, делающие изображение больше?

5. Да, во время выполнения есть классы для каждого типа анимации, такие как ScaleAnimation. Вы также можете использовать анимацию свойств, она проста в использовании и содержит всего несколько строк кода. Я бы предпочел, чтобы PropertyAnimation анимировал представление.