源码GitHub地址源码地址
GitHub的Readme那里有动态gif图
画裁剪框和阴影区域
最开始先画正方形裁剪框,这两种分别用不同的画笔
private static final String DEFAULT_BACKGROUND_COLOR_ID = "#99000000";//超过裁剪框阴影部分颜色
mTransParentLayerPaint = new Paint();//阴影区域画笔 mTransParentLayerPaint.setColor(Color.parseColor(DEFAULT_BACKGROUND_COLOR_ID));//设置颜色
mWhiteCropPaint = new Paint();
mWhiteCropPaint.setColor(Color.WHITE);//设置颜色
mWhiteCropPaint.setStrokeWidth(1);//设置填充宽度
mWhiteCropPaint.setStyle(Paint.Style.STROKE);//设置画笔Style
这里问题是,为什么第一个画出来的是区域,第二个画出来是一个线,style有三种模式:FILL(实心) STROKE(空心),FILL_AND_STROKE
设置好裁剪框画笔后,接着需要拿到裁剪框的Rectf区域就可以画上去了,首先得计算出裁剪框区域
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
float mThisWidth = getMeasuredWidth();
float mThisHeight = getMeasuredHeight();
mCropRectF.set(0, (mThisHeight - mThisWidth) / 2, mThisWidth, (mThisHeight + mThisWidth) / 2);//初始化矩形框
之所以因为裁剪框的top是(mThisHeight - mThisWidth) / 2,因为,裁剪框的高是mWidth,而上下空隙是相同的,所以是height-width再除以2,因为onlayout时是已经拿到测量宽高的,这里有个小问题是:getMeasuredWidth()和getWidth区别?