【问题标题】:Android, setVisbility to gone not working in RelativeLayoutAndroid,setVisbility 无法在 RelativeLayout 中工作
【发布时间】: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


【解决方案1】:

尝试在 setVisibility 之前调用spinner.clearAnimation();

Rich 提到的...

【讨论】:

  • 这解决了我非常相似的问题。
  • 我也遇到了同样的问题,这已经为我解决了!
  • 解决了我的问题mm!! ..Thankkssss!!
  • @evaneus 我认为这是正确的答案。 (不是像 postDelayed 这样的蹩脚修复......它会导致更多的错误然后修复。)请接受它。
  • 谢谢,这已经解决了。我为这个错误浪费了一个小时。
猜你喜欢
  • 1970-01-01
  • 2020-04-17
  • 2018-07-10
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
相关资源
最近更新 更多