2013-07-24 3 views
1

У меня есть активность (A), которая запускает другое действие (B) после вычисления. Моя проблема заключается в том, что при запуске Activity B стрелка, которая должна перемещаться слева направо при увеличении размера (масштабируется от 0,33 до 1), сначала отображается в течение очень короткой доли времени, прежде чем она начнет анимацию анимации анимации , Конечным результатом является мерцание мерцания полного размера, которое можно извлечь прямо перед началом анимации.Подходит для анимации перед анимацией анимации

Все кажется, что проблема связана с файлом анимации (.xml), а не с классом java. Это можно наблюдать, когда я удалить строку arrowImage.startAnimation(arrowExtent); в следующем коде:

protected void arrowAnimation(Animation arrowExtent) { 
     // TODO Auto-generated method stub 

     arrowImage.setImageResource(R.drawable.arrowimage); 
     arrowImage.startAnimation(arrowExtent); 
     arrowExtent.setFillAfter(true); 

Я попытался следующие:

  1. Использование setImageDrawable вместо setImageResource к вытяжке объекта.
  2. Установка arrowImage.setFillBefore(false);

Любые рекомендации будут весьма благодарны.

Анимация XML выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?> 

<set android:interpolator="@android:anim/accelerate_decelerate_interpolator"> 
    <scale 
     android:fromXScale="0.33" 
     android:toXScale="1.0" 
     android:fromYScale="0.0" 
     android:toYScale="1.0" 
     android:pivotX="50%" 
     android:pivotY="50%" 
     android:startOffset="0" 
     android:duration="1000" 
     android:fillBefore="false" /> 

    <translate 
     android:fromXDelta="0%" 
     android:toXDelta="75%p" 
     android:duration="1000" /> 

</set> 

ответ

0

При запуске деятельности вы должны сделать ImageView невидимым в xml или в onCreate() и когда анимация начинается, вы должны изменить ее на видимую.

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    // referencing views etc. 
    arrowImage.setVisibility(View.INVISIBLE); 
    // or make image invisible in xml 
} 

protected void arrowAnimation(Animation arrowExtent) { 
    arrowExtent.setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) { 
      arrowImage.setVisibility(View.VISIBLE); 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { } 

     @Override 
     public void onAnimationEnd(Animation animation) { } 
    }); 

    arrowImage.setImageResource(R.drawable.arrowimage); 
    arrowImage.startAnimation(arrowExtent); 
} 
+0

Спасибо за предложение, я забыл упомянуть, что для того, чтобы иметь возможность использовать контекстное меню в деятельности B, мне пришлось перенести анимацию из 'OnCreate (') для 'onWindowsFocusChanged()'. Я попробовал анимацию ранее в 'onCreate()' и получил те же результаты. Предлагаемый код не решает проблему, я заметил, что когда 'arrowImage.startAnimation (arrowExtent)' называется выталкиваемым, видимым или невидимым, нарисовано. – javiere

+0

Кроме того, попробовал следующее, чтобы увидеть, наблюдаю ли я какой-то намек, и я это сделал. Я попробовал 'arrowExtent.setStartOffset (1000)' в 'arrowAnimation()'. В результате получилось: 1. Мерцание стрелки. 2. Одна секунда ничего. 3. Анимация, начинающаяся с стрелки, масштабируется и трансформируется по мере продвижения анимации. Таким образом, мое чувство кишки говорит мне, что анимационный файл xml рисует стреловое изображение на экране перед запуском. Я отправляю анимацию xml. – javiere

Смежные вопросы