2014-11-05 43 views
0

我是新來的android編程,我最近搜索了一個對象的簡單的淡出動畫。我把它放在我的代碼中,測試它,它是波濤洶涌。我檢查了日誌,看到這個:I /編舞師(12759):跳過40幀!該應用程序可能在其主線程上做了太多工作

11-05 19:19:21.319:我/編舞(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(); 

} 

而且從淡入類代碼:

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,該線程與主線程同步並在其中執行其內容。這沒有任何意義,因爲就像在onCreate中執行runOnUiThread的內容一樣。

我建議您使用「fadeClass.animation(actMain);」直接在onActivityCreated內

+0

對不起,愚蠢的問題,但我該怎麼辦運行onActivityCreated?這似乎並沒有工作: \t public void onActivityCreated(){ \t \t fadeClass.animation(actMain); \t} – 2014-11-05 17:47:50

+0

在代碼中有一些我不明白的地方。爲什麼你的FadeIn類有一個onCreate方法?爲什麼它會誇大內容視圖?你想在包含在你的R.layout.activity_main中的視圖中應用動畫嗎?您可以將您的動畫方法放入MainActivity中,並將視圖(或視圖的引用)作爲參數傳遞。在onCreate中保存對動畫視圖的引用(findviewbyId),並在方法animation中使用此引用。關於onActivityCreated,我錯了(它在Fragments中使用),抱歉。在onResume或onCreate中使用它。 – Nescafemix 2014-11-06 10:41:11

0

您還可以通過簡單的動畫使用animate()方法動畫。動畫像alpha,旋轉,縮放可用。我正在舉一個翻譯的例子。

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

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

可以方便地在主線程來完成

相關問題