Я использую 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);