В моей MainActivity's xml
файле, activity_main.xml
У меня есть FrameLayout
показывает список оговорок:ProgressBar анимация показывает только один раз
<ProgressBar android:id="@+id/login_progress" style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_marginBottom="8dp" android:layout_marginTop="16dp"
android:visibility="gone"
android:layout_gravity="center"/>
<FrameLayout android:id="@+id/home_page_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Когда пользователь хочет устранить одну оговорку, нажав на него, список должен быть обновлен поэтому я выполнить вызов к сети, используя этот метод:
public void cancelReservation(ReservationResponse rR){
if (mNetwork != null) {return;}
if (isNetworkAvailable()) {
showProgress(true);
mNetwork = new NetworkTask(this, "cancel_reservation", rR);
mNetwork.execute((Void) null);
}else{
// display error
Log.d("LOG_TAG", "No network available!");
Toast.makeText(this, R.string.no_network_dialog ,Toast.LENGTH_LONG).show();
}
}
который обновляет AppEngine
оговорки и возвращает обновленный список обратно в Activity
. Перед выполнением AsyncTask
я вызвать метод showProgress
, начиная эту простую анимацию:
метод имеет постоянную длительность, в течение которого FrameLayout
скрыта в пользу ProgressBar
; то в onAnimationEnd
методы ProgressBar
«S FrameLayout
восстанавливается и анимация устанавливается на View.GONE
, наконец, показывая обновленный список оговорок:
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
public void showProgress(final boolean showProgr) {
final FrameLayout home_scroll = (FrameLayout) findViewById(R.id.home_page_frame);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
mProgressView.destroyDrawingCache();
int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime);
home_scroll.setVisibility(showProgr ? View.GONE : View.VISIBLE);
mProgressView.setVisibility(showProgr ? View.VISIBLE : View.GONE);
mProgressView.animate().setDuration(shortAnimTime*9).alpha(
showProgr ? 0 : 1).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mProgressView.setVisibility(showProgr ? View.GONE : View.VISIBLE);
home_scroll.setVisibility(showProgr ? View.VISIBLE : View.GONE);
}
});
} else {
home_scroll.setVisibility(showProgr ? View.GONE : View.VISIBLE);
}
}
Моей причудливая проблемой является то, что в то время как в первый раз, когда я отменить заказ анимация отображается, со второго раза каждый раз, когда я отменяю резервирование, анимация не появляется. Как так?
Я попытался с помощью вызова этого метода:
mProgressView.destroyDrawingCache();
, но он не работает ....