Временно запретить рисование во время анимации
Я получил большой 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
}
});