相机遮罩实现原理,FrameLayout中如果控件一样大,同一时间只能见到最上面的。
1.自定义ViewFindView,相机遮罩界面
public class ViewFinderView extends View {
//相机遮罩框外面的线,阴影区域,滚动线
private Paint border, area, line;
//相机遮罩框中间透明区域
private Rect center;
//屏幕大小
private int screenHeight, screenWidth;
//滚动线的起始点
private int startX, startY, endX, endY;
//滚动线向下滚动标识
private boolean isDown = true;
//滚动线速度
private static final int SPEED = 2;
//中间区域宽高(dp),
public static final int centerHeight = 300;
public static final int centerWidth = 300;
public ViewFinder(Context context) {
super(context);
}
public ViewFinder(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
//setAlpha一定要在setStyle后面,否则不起作用
border = new Paint(Paint.ANTI_ALIAS_FLAG);
border.setColor(Color.BLUE);
border.setStyle(Paint.Style.STROKE);
border.setStrokeWidth(5f);
border.setAlpha(10);
area = new Paint(Paint.ANTI_ALIAS_FLAG);
area.setStyle(Paint.Style.FILL);
area.setColor(Color.GRAY);
area.setAlpha(180);
screenHeight = DimenUtil.getScreenSize(context).heightPixels;
screenWidth = DimenUtil.getScreenSize(context).widthPixels;
center = getCenterRect(context, 300, 300);
line = new Paint(Paint.ANTI_ALIAS_FLAG);
line.setStyle(Paint.Style.STROKE);
line.setColor(Color.GREEN);
//设置滚动线的起始点
startX = center.left;
startY = center.top;
endX = center.right;
endY = center.top;
}
public ViewFinder(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
/**
* 根据尺寸获取中间区大小
*
* @param context
* @param height
* @param width
* &#