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

Я получил большой 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

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

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

            }
        });
Другие вопросы по тегам