【发布时间】:2011-09-14 23:56:51
【问题描述】:
我正在使用 RelativeLayout 将旋转微调器动画放在占位符图像的顶部,同时在后台线程中加载真实图像。
当真正的位图准备好后,下面的代码在 UI 线程中用 Activity.runOnUiThread(Runnable) 运行
问题是,我在加载真实图像后隐藏旋转图像的所有尝试似乎都失败了。我终于通过将底层图像视图放在前面来让它工作,但我只是好奇为什么 setVisibility(View.GONE) 和我尝试的其他方法不起作用。我尝试了各种方法试图隐藏旋转动画,但都没有奏效。
微调器图像在 ImageView 中简单地声明为:
android:src="@drawable/spinner_black_20"
然后我在它上面开始一个旋转动画。一旦加载了真实图像,这就是我尝试隐藏它的地方(在上面提到的 UI 线程中)
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);
【问题讨论】:
-
您是否在 if(spinner != null) 块内记录或单步调试调试器?如果您在检索微调器的引用时遇到错误,则此块不会执行。
-
是的,我通过了它。事实上,该块中的两行在执行时确实有效: .cancel() 调用有效,imageView.bringToFront() 调用也有效
-
只是一个想法......也许动画阻止了对 setVisibility 的调用。可以在spinner的动画上设置一个AnimationListener,然后在onAnimationEnd方法中隐藏吗?
-
这里也问过这个问题,还是没有回答:stackoverflow.com/questions/6515470/…
标签: android android-layout android-animation