根据我的要求,我必须在camera view
上显示一个框,以使脸部与用户对齐,如下图所示:
我能够创建一个drawable
到xml
,但是无法实现内圈的透明性,因此可以清晰地看到相机。我可以在drawable
下创建:
使用以下简单xml:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#44000000" />
<padding
android:bottom="50dp"
android:left="20dp"
android:right="20dp"
android:top="50dp" />
</shape>
</item>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#ffffff" />
</shape>
</item>
</layer-list>
是否可以在可绘制对象中创建这种类型的框架或图层?
答案 0 :(得分:1)
使用这种方法可使中心区域透明,但不能使其变为椭圆形。这可能会对您有所帮助。
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#00000000" />
<stroke android:width="100dp"
android:color="#e6e6e6"></stroke>
<padding
android:bottom="50dp"
android:left="20dp"
android:right="20dp"
android:top="50dp" />
</shape>
</item>
</layer-list>
答案 1 :(得分:0)
我有一个解决方案,但是不是通过xml 可绘制的。我们可以通过扩展CustomView
类来创建View
,该类可以按要求执行相同的操作:
public class RadiusOverlayView extends View {
Bitmap bm;
Canvas cv;
Paint eraser;
public RadiusOverlayView(Context context) {
super(context);
Init();
}
public RadiusOverlayView(Context context, AttributeSet attrs) {
super(context, attrs);
Init();
}
public RadiusOverlayView(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
Init();
}
private void Init() {
eraser = new Paint();
eraser.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
eraser.setAntiAlias(true);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
if (w != oldw || h != oldh) {
bm = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
cv = new Canvas(bm);
}
super.onSizeChanged(w, h, oldw, oldh);
}
@Override
protected void onDraw(Canvas canvas) {
int w = getWidth();
int h = getHeight();
int radius = w > h ? h / 2 : w / 2;
bm.eraseColor(Color.TRANSPARENT);
cv.drawColor(getResources().getColor(R.color.colorPrimary));
cv.drawCircle(w / 2, h / 2, radius, eraser);
canvas.drawBitmap(bm, 0, 0, null);
super.onDraw(canvas);
}
}
将此视图作为图层添加到camera view
上。
谢谢