当前位置: 首页 > 知识库问答 >
问题:

平滑进度条动画

吴高峰
2023-03-14

我试图为我的ProgressBar实现一个平滑的动画,但是当我增加时间(30秒)时,动画不再平滑。

5秒钟的例子:

30秒的例子:

我的进步背景:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <padding android:top="1dp" />
            <solid android:color="#10444444" />
        </shape>
    </item>
    <item>
        <shape>
            <padding android:top="1dp" />
            <solid android:color="#20444444" />
        </shape>
    </item>
    <item>
        <shape>
            <padding android:top="1dp" />
            <solid android:color="#30444444" />
        </shape>
    </item>
    <item android:id="@android:id/background">
        <shape>
            <solid android:color="@color/black_thirty" />
        </shape>
    </item>

    <item android:id="@android:id/progress">
        <clip>
            <shape>
                <solid android:color="#3500D0" />
            </shape>
        </clip>
    </item>
</layer-list> 

我的进度布局:

<ProgressBar
    android:id="@+id/pb_loading"
    android:layout_width="match_parent"
    android:layout_height="8dp"
    android:indeterminate="false"
    android:layout_centerInParent="true"
    android:progress="100"
    android:progressDrawable="@drawable/my_progress_bar" />

我的动画制作方法:

private void startAnimation(){
    ProgressBar mProgressBar = (ProgressBar) findViewById(R.id.pb_loading);
    ObjectAnimator progressAnimator = ObjectAnimator.ofInt(mProgressBar, "progress", 100, 0);
    progressAnimator.setDuration(30000);
    progressAnimator.setInterpolator(new LinearInterpolator());
    progressAnimator.start();
}

共有3个答案

裴英锐
2023-03-14

如果您有Android N及以上版本,您可以使用:

progressBar.setProgress(newProgress, true)

文件:

将当前进度设置为指定值,可以选择在当前值和目标值之间设置视觉位置的动画。

动画不会影响getProgress()的结果,它将在调用此方法后立即返回目标值。

https://developer.android.com/reference/android/widget/ProgressBar.html#setProgress(整型,布尔型)

丁书
2023-03-14

因为您使用的是OFIT的,所以只能以整数移动。换句话说,如果你有一个宽度为1000,进度为0到100的进度条,因为你是以整数速度移动的,那么你可以计算1、2、3、4,这将转换为10px、20px、30px和40px。这就解释了你看到的锯齿状。

要纠正这一点,你有几个选择。第一个是将整数从0提升到一些BigInt,这将给动画师更多的数字来处理。

ObjectAnimator progressAnimator = ObjectAnimator.ofInt(mProgressBar, "progress", 10000, 0);

另一个选项是使用ofFloat,它与ofInt执行相同的操作,但使用浮点而不是整数。

ObjectAnimator progressAnimator = ObjectAnimator.ofFloat(mProgressBar, "progress", 100.0, 0.0);
韦思淼
2023-03-14

如果您每次将进度值更改为1(例如从45更改为46),您将看不到动画。您最好将进度更改为100点(或者其他),为此您只需要将最大值乘以100,每个进度值也乘以100。例如:

    private void setProgressMax(ProgressBar pb, int max) {
        pb.setMax(max * 100);
    }

    private void setProgressAnimate(ProgressBar pb, int progressTo) 
    {
        ObjectAnimator animation = ObjectAnimator.ofInt(pb, "progress", pb.getProgress(), progressTo * 100);
        animation.setDuration(500);
        animator.setAutoCancel(true);
        animation.setInterpolator(new DecelerateInterpolator());
        animation.start();
    }
 类似资料:
  • 我试图创建一个进度条,当它水平前进时,进度条本身会以垂直旋转的方式进行动画。我通过以下方式成功地使用了我的进度绘图功能: 这是我的画: 但我希望它在前进的过程中有一个微妙的滚动效果。所以看起来垂直线在向后移动。你明白了吗?非常感谢您的帮助。谢谢 编辑:我尝试创建一个动画列表作为我的进度绘图,但我仍然不能看到动画。动画列表可以在进度项目的剪辑中吗?

  • 本文向大家介绍vue开发拖拽进度条滑动组件,包括了vue开发拖拽进度条滑动组件的使用技巧和注意事项,需要的朋友参考一下 分享一个最近写的进度条滑动组件,以前都是用jq写,学会了vue,尝试着拿vue来写觉得非常简单,代码复用性很强! 效果图如下: 调用组件如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我已经编写了一些代码,可以从高度图中渲染3D世界,现在我也编写了允许行走的代码。问题是,当高度增加时,动画几乎“跳跃”,因为每个单元都相当大。有没有一种简单的方法可以让动画更流畅?(一般来说,我对OpenGL和3D渲染非常陌生,所以我不想讨论插值和更复杂的事情。)

  • 所以我在谷歌上搜索了这个,但我能在上面找到任何东西:我在代码中调用了这个方法 然后,我添加了一个JProgressBar,称为进度条,并在单击GUI上的按钮时调用此代码: Progresslabel只是一个显示进度的标签。现在,当我这样做时,进度条显示如下: http://i.imgur.com/gXp5ByH.png 与其他应用程序上的情况不同: http://i.imgur.com/M61Cd

  • 本文向大家介绍js滚动条平滑移动示例代码,包括了js滚动条平滑移动示例代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js滚动条平滑移动相关代码,供大家参考,具体内容如下 html页 js页 css页 以上就是本文的全部内容,希望对大家的学习有所帮助。

  • 我想让水平进度条从0移动到100。我在布局中添加了这段代码。我应该怎么做才能移动这个进度条?