我对ImageView(缩放类型= Matrix)有奇怪的行为。
我有一些父视图(FrameLayout实际上,在图片上标记为灰色)。在此FrameLayout的顶部,我的ImageView位于MATCH_PARENT属性中。
所以我希望ImageView应该填充父视图。我在ImageView中使用不同大小的位图设置不同的情况(使用MATRIX ScaleType)。有时它比ParentView小,有时更大。我想使用imageView.setScaleY(scaleFactor)将位图调整为父界限,如果scaleFactor是>它完全有效。但是如果Bitmap实际上更大并且scaleFactor是< 1,ImageView表现得非常奇怪:ImageView的Drawable被正确缩放并尝试填充所有父视图,但由于某种原因,ImageView边界被缩小(与MATCH_PARENT相比)。结果如下图所示(比例因子约为0.5)。
看起来ImageView的大小是用Bitmap缩小的,我无法使用imageView.setMinimumWidth / Height或LayoutParams来阻止它。
有什么想法吗?
P.S。我无法使用Matrix转换来缩放ImageView(因为它在我的应用中用于不同的目的 - 缩放/移动/旋转)
答案 0 :(得分:1)
如果没有看到您的代码,我很难回答,但我会猜测。
我认为您在ImageView
和缩放ImageView
小部件本身中缩放缩放位图令人困惑。这是两件不同的事情。
所以你将ImageView
放在FrameLayout
MATCH_PARENT
的宽度和高度范围内。现在,您的ImageView
应与FrameLayout
的尺寸相同。一切都很好。
ImageView
是一个视图。所有视图都可以缩放(并翻译和旋转)。
当您说imageView.setScaleX()
和imageView.setScaleY()
时,您正在更改小部件的界限。无论布局参数是什么都没关系,您要改变视图的大小。
现在,ImageView
很特别,因为它有自己的方式缩放源图像而不用更改其边界。这是使用scaleType
属性。因此,使用ImageView
,您可以更改图片的大小,而无需更改ImageView
的界限。
我写了一个捏合/缩放视图并使用了我认为你正在做的scaleType="matrix"
。所以我在这里解决了你似乎遇到的问题:
位图带有一定的尺寸。 ImageView
一旦布局,就会有一定的尺寸。所以,让我们说位图和ImageView
具有相同的尺寸。矩阵的起始比例为1.非常简单。
那么如果尺寸不同呢?您必须计算起始比例。以下是我的工作方式:我创建了一个带有位图尺寸的Rect
(src)和另一个带有Rect
尺寸的ImageView
(dest)。然后我打电话给matrix.setRectToRect(src, dest, ScaleToFit.START)
。此方法在矩阵上设置比例因子,以便在位图上应用矩阵时(例如ImageView.setImageMatrix()
),位图可以正确调整为ImageView
的尺寸。
因为您还没有发布任何代码,所以我很难知道这是多么适用,但希望我在这里发布的内容会让您朝着正确的方向前进。
答案 1 :(得分:0)
正确的解决方案是使用矩阵变换。
经过深入调查后,我发现setScaleX()
方法的工作方式非常奇怪:
感谢kris larson的帮助
答案 2 :(得分:0)
添加0.7f 例: v.setScaleX(0.9f);