我正在尝试在Xamarin / Android项目中使用TwoDScrollView的C#端口。
工作正常。我们正在添加缩放手势(我们正在显示可以由用户放大/缩小的图像)。这也很好。
问题是TwoDScrollView依赖于ImageView.Width和ImageView.Height来进行计算并且不会改变 - 在缩放后尝试滚动时会导致问题。在调整大小时我们正在做:
fullscreenImageView.ScaleX = _scaleFactor;
fullscreenImageView.ScaleY = _scaleFactor;
var lp = fullscreenImageView.LayoutParameters;
lp.Width = (int) (fullscreenImageView.Drawable.IntrinsicWidth * _scaleFactor);
lp.Height = (int) (fullscreenImageView.Drawable.IntrinsicHeight * _scaleFactor);
fullscreenImageView.RequestLayout (); //the request layout was just a test,
// it doesn't work either way
我们可以看到layoutparameter的宽度和高度如何变化,但View.Width和View.Height永远不会改变...它总是我们加载的原始图像的尺寸。我们如何进行更新? (一种解决方案是缩放位图并将其分配给imageview,但这很糟糕而且很慢。)
感谢。
答案 0 :(得分:3)
根据this answer,您应该可以像这样设置ImageView对象的尺寸
image_view.getLayoutParams().width = (int) (fullscreenImageView.Drawable.IntrinsicWidth * _scaleFactor);
image_view.getLayoutParams().height = (int) (fullscreenImageView.Drawable.IntrinsicHeight * _scaleFactor);
其中image_view是对TwoDScrollView寻找尺寸的同一ImageView实例的引用。
答案 1 :(得分:2)
假设您的fullscreenImageView
延长ImageView
,您可以在fullscreenImageView
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = width * getDrawable().getIntrinsicHeight() / getDrawable().getIntrinsicWidth();
setMeasuredDimension(width, height);
}