有没有办法解决这个问题?我试过invalidate()
,但它仍然显示同样的问题。发生的事情是,在打开页面/ Activity之后,图像的行为类似于图A中的图像。它只是在来回滚动后呈现到我想要的布局(图B)。
我要做的是在运行时设置图像的宽度和高度。所以这也与我以前的问题有关:Images in my HorizontalListView changes it size randomly和ImageView dynamic width and height,它们得到了很少的帮助。
有关此事的任何提示,好吗?
编辑:顺便说一句,我的课程是: MyCustomAdapter (扩展baseadapter,它从ImageLoader调用displayimage()), MyActivity 和 ImageLoader (这是我的图片网址加载,解码,异步显示的地方)我也很困惑,我将在哪里设置imageView的高度和宽度。现在,我将它设置为ImageLoader。没关系。但我不知道我是否做对了。
答案 0 :(得分:0)
如果要在运行时手动设置宽度和高度,请在布局系统测量视图后获取对ImageView的LayoutParams的引用。如果在渲染阶段过早地执行此操作,则视图的宽度和高度以及父视图等将为0。
我在开源库中有一些可能对您有帮助的代码。这个过程分为两部分:
查看此示例,我将宽高比应用于自定义ImageView,然后再将其渲染到屏幕上。我不知道这是否完全适合您的用例,但这将演示如何将OnPreDrawListener添加到ViewTreeObserver,在完成后删除它,并在运行时将动态大小调整应用于View
这是一个修改后的版本,删除了我特定的调整大小逻辑。它还从imageView抓取ViewTreeObserver,如果你没有实现自定义控件而你只想在Activity中执行此操作,那么这种情况更有可能
private void initResizeLogic() {
final ViewTreeObserver obs = imageView.getViewTreeObserver();
obs.addOnPreDrawListener(new OnPreDrawListener() {
public boolean onPreDraw() {
dynamicResize();
obs.removeOnPreDrawListener(this);
return true;
}
});
}
protected void dynamicResize() {
ViewGroup.LayoutParams lp = imageView.getLayoutParams();
// resize logic goes here...
// imageView.getWidth() and imageView.getHeight() now return
// their initial layout values
lp.height = someCalculatedHeight;
lp.width = someCalculatedWidth;
imageView.setLayoutParams(lp);
}
}