Android 顶部裁剪ImageView TopCropImageView

367 阅读1分钟

在前端很容易实现的图片裁剪,Android上却做不了,网上查了很多没找到,然后去问chatGpt,问了半天,一度智障,最后改了参数总算实现了,代码如下


public class TopCropImageView extends AppCompatImageView {
    public TopCropImageView(Context context) {
        super(context);
        setScaleType(ScaleType.MATRIX);
    }

    public TopCropImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setScaleType(ScaleType.MATRIX);
    }

    public TopCropImageView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        setScaleType(ScaleType.MATRIX);
    }

    @Override
    protected boolean setFrame(int l, int t, int r, int b) {
        Drawable drawable = getDrawable();
        if (drawable == null) {
            return super.setFrame(l, t, r, b);
        }

        // 获取图片和ImageView的尺寸
        int drawableWidth = drawable.getIntrinsicWidth();
        int drawableHeight = drawable.getIntrinsicHeight();
        int viewWidth = getWidth();
        int viewHeight = getHeight();

        // 计算缩放比例和偏移量
        float scale = (float) viewWidth / drawableWidth;
        float dy = (viewHeight - drawableHeight * scale) * 0.0f;

        // 设置缩放和偏移矩阵
        Matrix matrix = getImageMatrix();
        matrix.setScale(scale, scale);
        matrix.postTranslate(0, Math.round(dy) - getPaddingTop());
        setImageMatrix(matrix);

        return super.setFrame(l, t, r, b);
    }
}