我有一个关于调整ImageView的大小与屏幕方向变化的问题。我需要在ImageView的顶部放置一个位图(用户通过点击放置的标记)。在屏幕方向发生变化时,我会存储标记的相对位置,并在重新显示图像时恢复它。
目前我的做法是:
在恢复时我调用以下代码:
参考如下:
重要的是,当我从较大的ImageView切换到较小的ImageView时,即从横屏切换到竖屏时,这种方法非常有效。但是反过来就不行了。ImageView似乎先恢复原大小,然后再缩放,这会使我的标记混乱。因此,除了在我的可运行代码中使用!=0条件之外,我肯定可以检查它是否与纵向模式下的大小相同。但首先,我对这种方法并不满意,我更希望在ImageView最终确定大小时得到通知。而且,我不想在我的状态包中传递视图大小。有没有更简单的方法实现这一点?
顺便说一下,我是通过以下方式加载ImageView的:
目前我的做法是:
在恢复时我调用以下代码:
handler.post(setCollectedAnswersRunnable);
参考如下:
关于此事:
Runnable setCollectedAnswersRunnable = new Runnable() {
@Override
public void run() {
if (iv.getMeasuredHeight() != 0) {
int x = Math.round(coordinateCollectedAnswer.x * iv.getMeasuredWidth() / (float) question.getImage().getWidth());
int y = Math.round(coordinateCollectedAnswer.y * iv.getMeasuredHeight() / (float) question.getImage().getHeight());
selectedX = x;
selectedY = y;
addPointerImageView(x, y);
} else {
handler.postDelayed(this, 330);
}
}
};
重要的是,当我从较大的ImageView切换到较小的ImageView时,即从横屏切换到竖屏时,这种方法非常有效。但是反过来就不行了。ImageView似乎先恢复原大小,然后再缩放,这会使我的标记混乱。因此,除了在我的可运行代码中使用!=0条件之外,我肯定可以检查它是否与纵向模式下的大小相同。但首先,我对这种方法并不满意,我更希望在ImageView最终确定大小时得到通知。而且,我不想在我的状态包中传递视图大小。有没有更简单的方法实现这一点?
顺便说一下,我是通过以下方式加载ImageView的:
Picasso.with(iv.getContext())
.load(AppConstants.SERVER_URL + "/api/" + question.getImage().getUrl())
.config(Bitmap.Config.RGB_565)
.into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
iv.setImageBitmap(bitmap);
iv.setAdjustViewBounds(true);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});