ImageView setScaleX / Y,比例因子<1
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ImageView setScaleX / Y,比例因子<1相关的知识,希望对你有一定的参考价值。
我对ImageView有奇怪的行为(比例类型=矩阵)。
我有一些父视图(FrameLayout实际上,在图片上标记为灰色)。在此FrameLayout的顶部,我的ImageView位于MATCH_PARENT属性中。
所以我希望ImageView应该填充父视图。我在ImageView中使用不同大小的位图设置不同的情况(使用MATRIX ScaleType)。有时它比ParentView小,有时更大。我想使用imageView.setScaleY(scaleFactor)将位图调整为父界限,如果scaleFactor> 1,它完全有效。但如果Bitmap实际上更大且scaleFactor <1,则ImageView的行为非常奇怪:ImageView的Drawable正确缩放并尝试填充所有父视图,但由于某种原因,缩小了ImageView边界(与MATCH_PARENT相比)。结果如下图所示(比例因子~0.5)。
所以看起来ImageView的大小是用Bitmap缩小的,我无法使用imageView.setMinimumWidth / Height或LayoutParams来阻止它。
有任何想法吗?
附:我无法使用Matrix转换来缩放ImageView(因为它在我的应用中用于不同的目的 - 缩放/移动/旋转)
我没有看到你的代码就很难回答,但我会猜测。
我认为你混淆在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
的尺寸。
因为你还没有发布任何代码,所以我很难知道这是多么适用,但希望我在这里发布的内容能让你朝着正确的方向前进。
正确的解决方案是使用矩阵变换。
经过深入调查后,我发现setScaleX()
方法以非常奇怪的方式工作:
- 缩放ImageView位图;
- 不会自动缩放ImageView - imageView.getHeight()返回未缩放的值,DeveloperOptions-> Show Layout Bounds显示未缩放的ImageView;
- 但它会缩放ImageView的Canvas - 因此ImageView具有正确的大小,但在SCALED Canvas中渲染Bitmap。
谢谢kris larson的帮助
添加0.7f示例:v.setScaleX(0.9f);
以上是关于ImageView setScaleX / Y,比例因子<1的主要内容,如果未能解决你的问题,请参考以下文章
android中imageview里的图片大小是不是可以比imageview本身大,如果可以,如何设置?
在 ImageView 中缩放图像(缩放 x,y) - IOS