2014-11-05 2 views
0

Я новичок в программировании для Android, и я недавно искал простую анимацию затухания для объекта. Я поместил его в свой код, протестировал его, и это было изменчиво. Я проверил бревна и увидел это:I/Хореограф (12759): Пропущено 40 кадров! Приложение может делать слишком много работы над своей основной нитью

11-05 19: 19: 21.319: I/Хореограф (12759): Пропущено 40 кадров! Приложение может делать слишком много работы над своей основной нитью.

Вот мой код в MainActivity классе

private MainActivity actMain; 
FadeIn fadeClass = new FadeIn(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    findViewById(R.id.view_switcher); 
    actMain = this; 

    new Thread() { 
     @Override 
     public void run() { 
      // If there are stories, add them to the table 
      try { 
       // code runs in a thread 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         fadeClass.animation(actMain); 
        } 
       }); 
      } catch (final Exception ex) { 
       Log.i("---", "Exception in thread"); 
      } 
     } 
    }.start(); 

} 

А из класса FadeIn:

private View view; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

} 

public void animation(Activity context) { 
    final View view = context.findViewById(R.id.fadeOutLayer); 
    Animation fadeOut = new AlphaAnimation(1f, 0f); 
    fadeOut.setDuration(3000); 
    fadeOut.setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) { 

     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 
      view.setVisibility(View.GONE); 

     } 
    }); 

    view.startAnimation(fadeOut); 

} 

Спасибо!

ответ

1

Вы создаете и выполняете новый поток в основном потоке, а внутри этого нового потока вы выполняете runOnUiThread, который синхронизируется с основным потоком и выполняет его содержимое в нем. Это не имеет смысла, потому что похоже на выполнение runOnUiThread в onCreate.

Я рекомендую вам использовать «fadeClass.animation (actMain)»; непосредственно внутри onActivityCreated

+0

Извините за глупый вопрос, но что мне делать, чтобы запустить onActivityCreated? это не работает: \t public void onActivityCreated() { \t \t fadeClass.animation (actMain); \t} –

+0

Есть некоторые вещи, которые я не понимаю в вашем коде. Почему у вас есть метод onCreate в вашем классе FadeIn? И почему это раздувает представление контента? Вы хотите применить анимацию в представлении, включенном в ваш R.layout.activity_main, правильно? Вы можете поместить свой метод анимации в MainActivity и передать представление (или ссылку на представление) в качестве параметра. В onCreate сохраните ссылку на представление для анимации (findviewbyId) и используйте эту ссылку с помощью анимации метода. Из-за onActivityCreated я ошибался (используется во Фрагментах) извините. Используйте его в onResume или onCreate. – Nescafemix

0

Вы также можете анимировать, используя метод animate() для простых анимаций. Доступны анимации, такие как альфа, вращение, масштаб. Я приведу пример перевода.

mImageView.animate().translationX(-screenWidth) 
    .setDuration(ANIMATION_DURATION).withEndAction(new Runnable() { 

     @Override 
     public void run() { 
      mImageView.setImageDrawable(d); 
      mImageView.setVisibility(View.INVISIBLE); 
     } 
}); 

Может быть легко сделать на главном потоке

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

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