Android, установите, чтобы Visible не работал в RelativeLayout - PullRequest
7 голосов
/ 15 сентября 2011

Я использую RelativeLayout, чтобы поместить вращающуюся вращающуюся анимацию поверх изображения заполнителя, пока реальное изображение загружается в фоновом потоке.

Когда реальное растровое изображение готово, запускается приведенный ниже кодв потоке пользовательского интерфейса с Activity.runOnUiThread (Runnable)

Проблема в том, что все мои попытки скрыть вращающееся изображение после загрузки реального изображения кажутся неудачными.Наконец-то я заработал, выдвинув базовый вид изображения на передний план, но мне просто любопытно, почему setVisibility (View.GONE) и другие методы, которые я пробовал, не работают.Я пробовал различные способы, пытаясь скрыть вращающуюся анимацию, но ни один из них не работал.

Изображение счетчика объявляется просто в ImageView как:

android:src="@drawable/spinner_black_20"

Затем я запускаю анимацию вращения наЭто.После загрузки реального изображения я пытаюсь скрыть его (в потоке пользовательского интерфейса, как упомянуто выше)

View v = (View)imageView.getParent();
ImageView spinner = (ImageView) v.findViewById(R.id.loading_spinner);
if (spinner != null) {
    spinner.getAnimation().cancel(); // this works, the animation stops
    spinner.setVisibility(View.INVISIBLE); // doesn't work, spinner bitmap still there
    spinner.setVisibility(View.GONE); // doesn't work
    spinner.getDrawable().setVisible(false, false); // tried this, no joy
    spinner.refreshDrawableState(); // thought this might help, nope
    spinner.invalidate(); // nor this
    imageView.bringToFront(); // this works, in that spinner disappears to background
}
imageView.setImageBitmap(bitmap);

1 Ответ

62 голосов
/ 20 сентября 2011

Попробуйте позвонить spinner.clearAnimation(); перед setVisibility.

Это то, на что ссылался Рич ...

...