package com.gh.common.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Matrix; import android.util.AttributeSet; import android.util.TypedValue; import android.widget.ImageView; import android.widget.RelativeLayout; import com.lightgame.utils.Utils; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; public class CropImageCustom extends RelativeLayout { private CropImageZoomView mZoomImageView; private CropImageBorderView mClipImageView; private int mHorizontalPadding = 20; public CropImageCustom(Context context, AttributeSet attrs) { super(context, attrs); mZoomImageView = new CropImageZoomView(context); mClipImageView = new CropImageBorderView(context); android.view.ViewGroup.LayoutParams lp = new LayoutParams( android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.MATCH_PARENT); this.addView(mZoomImageView, lp); this.addView(mClipImageView, lp); // 计算padding的px mHorizontalPadding = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, mHorizontalPadding, getResources() .getDisplayMetrics()); mZoomImageView.setHorizontalPadding(mHorizontalPadding); mClipImageView.setHorizontalPadding(mHorizontalPadding); } /** * 对外公布设置边距的方法,单位为dp * * @param mHorizontalPadding */ public void setHorizontalPadding(int mHorizontalPadding) { this.mHorizontalPadding = mHorizontalPadding; } /** * 裁切图片 * * @return */ public Bitmap clip() { return mZoomImageView.clip(); } public boolean savePicture(String path) { float limitSize = 900; int quality = 90; Bitmap bitmap = mZoomImageView.clip(); File file = new File(path); if (bitmap.getHeight() > limitSize || bitmap.getWidth() > limitSize) { Matrix matrix = new Matrix(); matrix.setScale(limitSize / bitmap.getWidth(), limitSize / bitmap.getHeight()); bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); } try { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); bitmap.compress(Bitmap.CompressFormat.WEBP, quality, bos); bos.flush(); bos.close(); } catch (Exception e) { e.printStackTrace(); return false; } return true; } public ImageView getCropImageZoomView() { return mZoomImageView; } public void setBitmap(Bitmap bitmap) { mZoomImageView.setImageBitmap(bitmap); } }