Панель прогресса не обновляется корректно после анимации

#android #android-layout

#Android #android-layout

Вопрос:

У меня есть макет с панелью прогресса (на самом деле это панель поиска, но та же проблема возникает с панелью прогресса). Это работает нормально, пока я не начну анимировать весь макет, переводя его вниз. Во время анимации панель прогресса продолжает работать должным образом, но когда анимация завершена (и я замораживаю макет в конечной позиции анимации с помощью Animation.setFillAfter(true)), панель прогресса перестает обновляться корректно, вместо этого просто небольшая строка в верхней части панели продолжает обновляться, в то время как нижняя часть панели прогресса остается замороженной (это горизонтальная панель прогресса).

Некоторый код: Макет с панелью прогресса:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@ id/video_buttons"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom|left">   
<SeekBar
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@ id/progressbar_Horizontal"
    style="?android:attr/progressBarStyleHorizontal"
    android:max="100"
/>
  

Вот где я определяю анимацию:

 Animation a = AnimationUtils.loadAnimation(this, R.anim.translate_down);
a.setFillAfter(true);
  

Здесь я запускаю анимацию для всего макета:

 View vv = p.findViewById(R.id.video_buttons);
vv.startAnimation(anim);
  

Комментарии:

1. Недостаточно кода. Вы должны опубликовать полный тестовый пример.

Ответ №1:

Моя первая мысль заключается в том, что вы, возможно, непреднамеренно используете свойство «android:secondaryProgress».

Помимо этого, если вы запускаете это в отдельном потоке, убедитесь, что вы используете следующее:

 activity.runOnUiThread(new Runnable() //
            {
                public void run() //
                {
                    int newProgressVal = Integer
                            .parseInt((String) syncProgressNumber.getText())   1;
                    syncProgress.incrementProgressBy(1);
                    syncProgressNumber.setText(String
                            .valueOf(newProgressVal));
                }
            });
  

Поток пользовательского интерфейса не является потокобезопасным, поэтому вы не можете обновлять пользовательский интерфейс из других потоков.

Надеюсь, это поможет!