Как нарисовать рамку вокруг лица на frameLayout android

У меня есть frameLayout в xml:

<FrameLayout
    android:layout_width="150px"
    android:layout_height="200px"
    android:id="@+id/preview">
</FrameLayout>

Этот предварительный просмотр предназначен для отображения вида с камеры:

mPreview = new CameraSurfacePreview(MainActivity.this, cameraObj,...);
preview.addView(mPreview2);
....

Он успешно отображает лицо с фронтальной камеры. И у меня есть координаты x и y прямоугольника лица. Как я могу отобразить ограничивающую рамку лица на frameLayout?

Спасибо.


person Wei G    schedule 16.10.2015    source источник


Ответы (1)


ну, вы можете использовать ShapeDrawable и установить для него параметры макета, соответствующие размеру и местоположению, которые вам нужны, и добавить его в FrameLayout вместе с CameraSurfacePreview.

Это не так уж и сложно. Сначала создайте объект ShapeDrawable с нужными свойствами. Затем установите его в качестве фона для стандартного объекта View и добавьте представление с параметрами макета, чтобы изменить его размер, как вы хотите. Итак, если вы хотите

ShapeDrawable sd = new ShapeDrawable(new RectShape());
sd.getPaint().setColor(0xFFFFFFFF);
sd.getPaint().setStyle(Paint.Style.STROKE);
sd.getPaint().setStrokeWidth(1);
View shapeView = new View(context);
shapeView.setBackground(sd);


FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(100, 100);
params.setMargins(left, top, 0, 0);
frameLayout.addView(shapeView, params);

В этом конкретном случае я сделал вид 100x100, поэтому размер формы будет автоматически соответствовать виду. и я настроил его так, чтобы он смещался от верхнего угла на значения left и top.

Есть много способов сделать это, но кажется, что это самый простой. Конечно, вы можете сделать все это и в XML. Есть много руководств о том, как это сделать.

person Matt    schedule 16.10.2015
comment
Раньше я не использовал ShapeDrawable. Он должен рисовать на холсте. Должен ли я переопределить метод onDraw, чтобы он отображался на FrameLayout? - person Wei G; 16.10.2015