在前端很容易实现的图片裁剪,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);
}
}