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

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

基本上我想要的是只显示这个bigger picture 中的这个top part,它位于我的“可绘制”文件夹中,在我的活动顶部。

到目前为止的代码:

<ImageView
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:layout_marginTop="1dp"
        android:src="@drawable/coffee"
        android:scaleType="centerCrop" />

我可以做些什么来获得想要的结果,即将裁剪的图像转换为仅显示顶部。

【问题讨论】:

标签: android imageview crop


【解决方案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 代码,使用第二个已经手动裁剪的图像作为资源会简单得多。
猜你喜欢
  • 2013-08-16
  • 1970-01-01
  • 2013-08-16
  • 2016-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
相关资源
最近更新 更多