如何在onCreate中将图像缩放到imageview时,当我需要使用缩放类型矩阵
我试图创建具有缩放功能的ImageView
。 我已经准备好了缩放功能,但是现在我想让图像在启动Activity
时缩放到ImageView
。通常我会在xml布局中使用ScaleType
, ,但对于缩放功能它需要为Matrix
。我怎样才能做到这一点?如何在onCreate中将图像缩放到imageview时,当我需要使用缩放类型矩阵
我想从这个问题的解决方案:Android image view matrix scale + translate
Matrix m = imageView.getImageMatrix();
RectF drawableRect = new RectF(0, 0, imageWidth, imageHeight);
RectF viewRect = new RectF(0, 0, imageView.getWidth(), imageView.getHeight());
m.setRectToRect(drawableRect, viewRect, Matrix.ScaleToFit.CENTER);
imageView.setImageMatrix(m);
但问题是我不能使用getWidth()
和getHeight()
由于其早期(它只返回0)。有没有解决办法?或者我该如何解决这个问题?
您需要一个添加的观察员ImageView
,当对象被layouted将被称为:
imageView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int width = imageView.getWidth();
int height = imageView.getHeight();
// do your stuff
}
});
唯一的办法,以确保一个看法宽度和高度是继承视图和覆盖onSizeChanged()
并使用给定的宽度/高度或使用getMeasuredHeight()
和getMeasuredWidth()
。
这意味着您的矩阵将不会在onCreate()
之后设置(直到视图将首次渲染),但至少您发布的代码可以完全进入子类视图。
我有矩阵,缩放和imageview相同的问题,我发现最简单的解决方案是渲染图像两次,一个与scaleType fitcenter和矩阵。
经过多次(还真不少..)与setRectToRect之前(等..)中提到的解决方案,我终于找到一个解决方案(至少我的情况下,类似的帖子)诱惑:
在您的活动XML集fitcenter的ImageView的:
<ImageView
...
android:scaleType="fitCenter"
然后在你的java文件中定义一个初始化函数上重点变成
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
init();
}
}
private void init() {
maxZoom = 10;
minZoom = 1f;
height = viewHeight;
width = viewWidth;
**Matrix m = imageSWT.getImageMatrix();
imageSWT.setScaleType(ScaleType.MATRIX);
matrix.set(m);**
}
所以我使用fitcent的财产呃然后我得到他的矩阵,之后我切换到矩阵模式(用于缩放功能),并且我将fitcentered矩阵保存到矩阵缩放对象中,以便在使用缩放时保持更改。
我希望这个解决方案可以帮助某人;)
thnx工作很棒:) – Luciano 2012-01-30 09:54:45