gpt4 book ai didi

java - 动画(偶尔)滞后

转载 作者:行者123 更新时间:2023-12-01 11:49:46 27 4
gpt4 key购买 nike

我有 4 个 TextView。它们一开始都是不可见的,我将它们动画到屏幕上(从底部滑入)。我启动一个线程来为每个动画制作动画,每个动画开始时间间隔 200 毫秒。问题是:开始 Activity 后第一次为 TextView 制作动画时,它们会滞后。但如果我之后再次为它们设置动画,它们就不会了。有时它们会随机滞后,但这种情况并不常见。我只是想知道是否有办法阻止这种情况。我只在一部手机上进行了测试,所以可能是这样,但奇怪的是它只发生在开始 Activity 后的第一个动画上。

    animatingGroup = 0;
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
public void run() {
while (animate) {

try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
public void run() {
Animation slideInAnim = AnimationUtils
.loadAnimation(getApplicationContext(),
R.anim.slide_in_from_bottom);
switch (animatingGroup) {
case 1:
tv1.startAnimation(slideInAnim);
tv1.setVisibility(View.VISIBLE);
break;
case 2:
tv2.startAnimation(slideInAnim);
tv2.setVisibility(View.VISIBLE);
break;
case 3:
tv3.startAnimation(slideInAnim);
tv3.setVisibility(View.VISIBLE);
break;
case 4:
tv4.startAnimation(slideInAnim);
tv4.setVisibility(View.VISIBLE);
animate = false;
break;
}
animatingGroup++;
}
});
}

}
};
new Thread(runnable).start();

这是动画:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
android:duration="800"
android:toYDelta="0%"
android:fromYDelta="100%p" />

</set>

最佳答案

不要在处理程序内部创建幻灯片,它会耗尽资源,尝试在 onCreate() 中创建一次......也许

编辑:在我看来,这是一种干净而简单的方法来实现您想要实现的目标:

将您的 Textview 放入数组中:

TextView[] textViews = new TextView[]{tv1,tv2,tv3,tv4};

创建一个处理动画 startOffset 的 for 循环:

int startOffset = 200;

for(int i=0; i < textViews.length(); i++){
animSlideIn.setStartOffset(startOffset);
textViews[i].setVisibility(View.Visible);
textViews[i].startAnimation(animSlideIn);
startOffset = startOffset + 200;
}

这样你就可以削减新的Thread和Handler Runnable的东西,并节省大量代码。

关于java - 动画(偶尔)滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28889685/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com