ImageView缩放和宽度/高度更改

时间:2013-12-20 22:42:11

标签: c# android xamarin.android xamarin

我正在尝试在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,但这很糟糕而且很慢。)

感谢。

2 个答案:

答案 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);
}