1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package com.hand.face.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.widget.ImageView;
import com.hand.face.utils.DisplayUtil;
/**
* Created by USER on 2016/12/13.
*/
public class MaskView extends ImageView {
int widthScreen, heightScreen;
private RectF shelterR;
private Paint mPaint;
public MaskView(Context context) {
super(context);
}
public MaskView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public MaskView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context){
Point p = DisplayUtil.getScreenMetrics(context);
widthScreen = p.x;
heightScreen = p.y;
mPaint = new Paint();
mPaint.setStyle(Paint.Style.FILL);
mPaint.setStrokeWidth(2);
mPaint.setAntiAlias(true);
mPaint.setColor(Color.WHITE);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (shelterR == null || shelterR.isEmpty()) {
shelterR = new RectF(0, 0,widthScreen, heightScreen);
}
// 画入前景圆形蒙板层
int sc = canvas.saveLayer(shelterR, null, Canvas.MATRIX_SAVE_FLAG
| Canvas.CLIP_SAVE_FLAG | Canvas.HAS_ALPHA_LAYER_SAVE_FLAG
| Canvas.FULL_COLOR_LAYER_SAVE_FLAG
| Canvas.CLIP_TO_LAYER_SAVE_FLAG | Canvas.ALL_SAVE_FLAG);
mPaint.setAlpha(125);
canvas.drawRect(shelterR, mPaint);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
mPaint.setColor(Color.WHITE);
canvas.drawCircle(getWidth() / 2, getHeight() / 2, widthScreen*9/20, mPaint);
canvas.restoreToCount(sc);
mPaint.setXfermode(null);
mPaint.setColor(Color.WHITE);
}
}