在MainActivity
中,单击相机按钮,拍照,然后图像显示在PreviewActivity
上,然后我应该得到imageView
的宽度和高度。 / p>
当我触摸屏幕时,我试图显示一条log
消息,其中显示了高度值;现在,高度值已得到校正;所以我认为问题在于,imageView
可能一开始并没有被布局。即使我使用的是 {getViewTreeObserver()
。“
ViewTreeObserver viewTreeObserver = mImageView.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mImageView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
setImage(mCurrentPhotoPath, selectedImageUri);
}
});
}
编辑:我弄清了问题是高度值比实际值高。因为当打开相机应用时, statusBar 被隐藏了,并且再次显示在PreviewActivity
上,但是imageView是在再次备份 statusBar 之前测量的,这会导致问题并导致Height变高。
答案 0 :(得分:2)
您可以尝试在post方法中获取宽度,例如:
mImageView.post(new Runnable(){
@Override
public void run() {
mHeight = mImageView.getHeight(); //height is ready
}
});
据我所知,帖子中的可运行任务将在视图的尺寸和布局之后执行。
答案 1 :(得分:1)
因此,我能够解决此问题的唯一方法是;如果我们从相机获取了图像(并且从MainActivity
打开了图像),则在稍加延迟后获得高度和宽度,以便所有内容都可以布置好。
//-- Get image path from previous activity
mCurrentPhotoPath = getIntent().getStringExtra("imagePath");
selectedImageUri = getIntent().getData();
helper.setImage(mCurrentPhotoPath, selectedImageUri); //set image to imageView
if (cameraOpenedFromMainActivity) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//method to get height and width and do stuff
}
}, 500); //increase until everything is fine
}else {
ViewTreeObserver viewTreeObserver = mImageView.getViewTreeObserver();
if (viewTreeObserver.isAlive()) {
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mImageView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
//method to get height and width and do stuff
}
});
}
}
//--