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();
}
我有一个不确定的进度条,我想温和地终止它。 将其可见性状态设置为 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();
}