我是Android编程的新手,我最近搜索了一个对象的简单淡出动画。我把它放在我的代码中,对它进行了测试,它很不稳定。我检查了日志并看到了这个:
11-05 19:19:21.319:I / Choreographer(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);
}
谢谢!
答案 0 :(得分:1)
您正在主线程中创建并执行新线程,并且在此新线程内部,您正在执行runOnUiThread,它与Main线程同步并在其中执行其内容。这没有任何意义,因为就像在onCreate中执行runOnUiThread的内容一样。
我建议您使用" fadeClass.animation(actMain);"直接在onActivityCreated内部
答案 1 :(得分:0)
您也可以通过简单地使用animate()方法为简单动画制作动画。可以使用alpha,旋转,缩放等动画。我举了一个翻译的例子。
mImageView.animate().translationX(-screenWidth)
.setDuration(ANIMATION_DURATION).withEndAction(new Runnable() {
@Override
public void run() {
mImageView.setImageDrawable(d);
mImageView.setVisibility(View.INVISIBLE);
}
});
可以在主线程上轻松完成