在imageview中缩放和锚定图像

时间:2013-09-26 11:10:27

标签: android listview layout imageview

我目前正在使用自定义ArrayAdapter作为列表。列表项跨越整个屏幕宽度,因此某些设备非常宽。

我在一些列表项上叠加ImageView,您可以滑动以解除这些项目。 ImageView的xml如下:

<ImageView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentLeft="true"
  android:layout_alignParentRight="true"
  android:layout_centerInParent="true"
  android:scaleType="matrix"
  android:src="@drawable/myImage" />

视图放置正确,但为了使图像适合具有真正宽屏幕的设备,或者在横向模式下,图像必须非常宽。

问题是,我想缩放图像以垂直拟合(即fitY不存在scaleType,然后将图像锚定到视图的左侧,并且一切都不适合裁剪。

我已经尝试了所有scaleType值,但没有一个是正确的。因此,我觉得我应该使用matrix并为图像定义我自己的翻译,所以我在getView中尝试了这个:

//snipped out code before to initiate variables etc.
Drawable src = imageView.getDrawable();

//scale by the ratio of the heights.
int scaleFactor = imageView.getHeight() / src.getIntrinsicHeight();

Matrix imageMatrix = new Matrix();

//set the scale factor for the imageMatrix
imageMatrix.setScale(scaleFactor, scaleFactor);

//set the translation to be 0,0 (top left);
imageMatrix.setTranslate(0,0);

//assign the image matrix to the imageview.
imageView.setImageMatrix(imageMatrix);

但这根本没有任何影响(即使我让价值观真的很疯狂)。我假设我将imageMatrix设置在错误的位置 - 我是否可以为自定义onDraw()子类挂接ArrayAdapter事件?

或者我是否会以完全错误的方式解决问题?

2 个答案:

答案 0 :(得分:1)

最后,我必须在代码中明确设置imageView.setScaleType(ScaleType.MATRIX);,然后将imageMatrix应用于此代码。使用xml属性scaleType="matrix"似乎不起作用。

答案 1 :(得分:-1)

fitXY scaleType仅在根据您使用的API级别将layout_width和layout_height设置为match_parent或fill_parent时才起作用。 所以你必须只在你的xml中使用这段代码:

<ImageView
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_alignParentLeft="true"
  android:layout_alignParentRight="true"
  android:layout_centerInParent="true"
  android:scaleType="fitXY"
  android:src="@drawable/myImage" />