java - 动画(偶尔)滞后

标签 java android animation

我有 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/

相关文章:

ios - 平滑动画 CAShapeLayer 路径

android - 动画 View 的外部笔划(按钮)

android - 在 fragment 中集成 google plus api 时出现 ClassCastException

android - 无法获得作为系统应用程序安装的应用程序的签名|系统权限

android - 使用低 SDK 构建工具版本编译

css - iOS 上的动画 stroke-dashoffset

java - 为什么 BufferedInputStream 一次最多读取 2048 个字节?

java - 获取用户拥有的 YouTube channel 列表

java - Elasticsearch QueryBuilder 匹配多个术语

Java try 和finally 多线程示例中的阻塞