Android 柔和地结束不确定的ProgressBar

Android End indeterminate ProgressBar softly

我有一个不确定的进度条,我想温和地终止它。 将其可见性状态设置为 INVISIBLE 或 GONE 会使它突然消失。我希望它能顺利消失,就像我在我使用过的许多其他应用程序中看到的那样...

<ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:indeterminate="true"
    android:id="@+id/progress"
    android:indeterminateTint="@color/red"
    android:visibility="invisible"
    android:layout_centerInParent="true"/>

在需要隐藏时做一个 alpha 动画。您可以使用 ViewPropertyAnimator:

顺利隐藏:

myView.animate().alpha(0);

再次顺利展示:

myView.animate().alpha(1);

这应该可以完成工作。

public static final void hideView(final View view, final long durationInMillis)
{
    final Handler handler = new Handler(Looper.getMainLooper(), new Handler.Callback() {
        @Override
        public boolean handleMessage(Message msg)
        {
            if(msg.what > 0) {
                view.setAlpha(1.0F - (msg.what / 10F));
                return true;
            }
            view.setVisibility(View.GONE /* or View.INVISIBLE */);
            return false;
        }
    });

    new Thread(new Runnable() {
        @Override
        public void run() {
            long time = (long)(durationInMillis / 10F);
            try {
                for(int i=1; i<=10; i++) {
                    handler.sendEmptyMessage(i);
                    Thread.sleep(time);
                }
            } catch(InterruptedException e) {
            } finally {
                view.setAlpha(0);
                //Optional
                handler.sendEmptyMessage(0);
            }
        }
    }).start();
}