在 Android 中,如何移动裁剪的图像? (高级ImageView定位)
Posted
技术标签:
【中文标题】在 Android 中,如何移动裁剪的图像? (高级ImageView定位)【英文标题】:In Android, how to shift a cropped Image? (advanced ImageView positioning) 【发布时间】:2016-03-21 13:05:00 【问题描述】:我试图在ImageView
中显示更大图片的特定部分/框架。
我尝试了几种不同的 XML 属性(scaleType
、maxHeight
等),但我自己无法弄清楚。
基本上我想要的是只显示这个bigger picture 中的这个top part,它位于我的“可绘制”文件夹中,在我的活动顶部。
到目前为止的代码:
<ImageView
android:layout_
android:layout_
android:layout_marginTop="1dp"
android:src="@drawable/coffee"
android:scaleType="centerCrop" />
我可以做些什么来获得想要的结果,即将裁剪的图像转换为仅显示顶部。
【问题讨论】:
android:scaleType="fitStart" 不起作用? 很遗憾,结果是这样的:i.imgur.com/8SrdDD2.png 【参考方案1】:试试这个,效果很好:
public class TopCropImageView extends ImageView
public TopCropImageView(Context context)
super(context);
setScaleType(ScaleType.MATRIX);
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom)
super.onLayout(changed, left, top, right, bottom);
recomputeImgMatrix();
@Override
protected boolean setFrame(int l, int t, int r, int b)
recomputeImgMatrix();
return super.setFrame(l, t, r, b);
private void recomputeImgMatrix()
final Matrix matrix = getImageMatrix();
float scale;
final int viewWidth = getWidth() - getPaddingLeft() - getPaddingRight();
final int viewHeight = getHeight() - getPaddingTop() - getPaddingBottom();
final int drawableWidth = getDrawable().getIntrinsicWidth();
final int drawableHeight = getDrawable().getIntrinsicHeight();
if (drawableWidth * viewHeight > drawableHeight * viewWidth)
scale = (float) viewHeight / (float) drawableHeight;
else
scale = (float) viewWidth / (float) drawableWidth;
matrix.setScale(scale, scale);
setImageMatrix(matrix);
【讨论】:
感谢您的解决方案,但我正在寻找一个更短的 XML 解决方案,如果它需要这么多的 java 代码,使用第二个已经手动裁剪的图像作为资源会简单得多。以上是关于在 Android 中,如何移动裁剪的图像? (高级ImageView定位)的主要内容,如果未能解决你的问题,请参考以下文章