Временно запретить рисование во время выполнения анимации

Я получил большой ImageView, который покрывает весь экран. Я сделал «выдвижное» меню, которое активируется, когда вы нажимаете в любом месте экрана, я сделал это с помощью анимации, чтобы оно выглядело так, как будто меню выдвигается.

Из-за изображения внутри ImageView это приводит к заиканию анимации. Когда я оставляю ImageView пустым, все идет очень гладко.

Это связано с тем, что изображение внутри ImageView постоянно перерисовывается во время анимации, и мой планшет Android с трудом обрабатывает его.

Я пытался установить WillNotDraw на true на моем ImageView и обратно на false, когда анимация завершена, но это приводит к тому, что изображение исчезает во время воспроизведения анимации (плавно), а затем появляется снова.

Вот как я создаю анимацию:

topMenu.setVisibility(View.VISIBLE);
Animation slideDown = AnimationUtils.loadAnimation(this, R.anim.slide_down);
slideDown.setStartOffset(200);
topMenu.startAnimation(slideDown);

Это анимация xml:

<?xml version="1.0" encoding="utf-8"?>
<set 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/accelerate_interpolator">
   <translate 
       android:fromYDelta="-40" 
       android:toYDelta="0" 
       android:duration="200"/>
</set>

Изображение внутри ImageView сделано Bitmap

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


person Pieter888    schedule 07.06.2012    source источник
comment
Как вы создавали анимацию? Как ты это называешь? Это одна из тех вещей, которые можно сделать так много разных способов, что вам определенно потребуется код, чтобы помочь вам. Вставьте соответствующий код. :)   -  person Fuzzical Logic    schedule 07.06.2012
comment
Вам все еще не хватает кода для самой анимации. Похоже, вы создали его с помощью XML-файла? Хотя это может показаться неуместным (и действительно может быть таковым), мы не узнаем, пока не увидим это. Возможно, вы захотите вставить и это. Есть ли у этого также аналог slide_up? Сколько анимаций использует это верхнее меню?   -  person Fuzzical Logic    schedule 07.06.2012


Ответы (2)


Как насчет того, скажем, если вы используете Animation Listener и обратите внимание на завершение анимации и нарисуйте изображение в конце, используя это,

slideDown.setAnimationListener(new AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                // TODO Auto-generated method stub

            }

            public void onAnimationEnd(Animation animation) {
                // Draw your Image here

            }
        });
person Andro Selva    schedule 07.06.2012
comment
Я уже пробовал это, но это приводит к тому, что изображение исчезает во время анимации и снова появляется в конце. - person Pieter888; 07.06.2012

Питер,

Согласно вашему коду, вы перезагружаете анимацию каждый раз, когда хотите запустить анимацию. Возможно, вы захотите переместить саму загрузку анимации в член класса, а не в локальную переменную. Это ослабит некоторое напряжение. Более подробная информация, когда будет предоставлена ​​​​дополнительная информация.

person Fuzzical Logic    schedule 07.06.2012
comment
Я отредактировал свой код, но, похоже, это не устранило заметной нагрузки. Я отредактирую свой вопрос с дополнительной информацией. - person Pieter888; 07.06.2012