在 Android 中,如何移动裁剪的图像? (高级ImageView定位)

Posted

技术标签:

【中文标题】在 Android 中,如何移动裁剪的图像? (高级ImageView定位)【英文标题】:In Android, how to shift a cropped Image? (advanced ImageView positioning) 【发布时间】:2016-03-21 13:05:00 【问题描述】:

我试图在ImageView 中显示更大图片的特定部分/框架。 我尝试了几种不同的 XML 属性(scaleTypemaxHeight 等),但我自己无法弄清楚。

基本上我想要的是只显示这个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定位)的主要内容,如果未能解决你的问题,请参考以下文章

缩放图像以在android中裁剪

如何移动和缩放图像[关闭]

在 Android 上即时裁剪图像

在不移动叠加视图的情况下裁剪和缩放图像,而是在 ImageView 中移动图像

Android 在 OS 2.3 上选择和裁剪图像

如何在android中以圆形裁剪图像?