У меня есть изображение (шляпа) на переднем просмотре камеры (в фрагменте), поэтому вы можете попробовать шляпу перед покупкой. Но проблема в том, что когда в этом предварительном просмотре я пытаюсь открыть Навигационный ящик, моя шляпа перекрывает этот ящик, а передняя камера находится под ящиком навигации. Как сделать снимок (шляпу) ниже ящика навигации?Изображение накладывается на навигационный ящик
MirrorFragment.java:
public class MirrorFragment extends Fragment implements SurfaceHolder.Callback {
private Camera camera = null;
private SurfaceHolder cameraSurfaceHolder = null;
private boolean previewing = false;
private static int wid = 0, hgt = 0;
private View cameraViewControl;
private Button btnCapture;
private Activity activity;
public MirrorFragment() {
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.activity = (Activity) context;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
SurfaceView cameraSurfaceView;
Display display;
View view = inflater.inflate(R.layout.fragment_mirror, container, false);
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
int toolbarHeight = ((MainActivity) activity).getToolbar().getHeight();
display = getActivity().getWindowManager().getDefaultDisplay();
wid = display.getWidth();
hgt = display.getHeight();
activity.getWindow().setFormat(PixelFormat.TRANSLUCENT);
activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
cameraSurfaceView = (SurfaceView) view.findViewById(R.id.cameraSurfaceViewFragment);
cameraSurfaceHolder = cameraSurfaceView.getHolder();
cameraSurfaceHolder.addCallback(this);
cameraSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
LayoutInflater layoutInflater = LayoutInflater.from(getActivity());
RelativeLayout.LayoutParams layoutParamsControl = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
cameraViewControl = layoutInflater.inflate(R.layout.cambutton, null);
btnCapture = (Button) cameraViewControl.findViewById(R.id.btnCapture);
setMarginTopForHat(toolbarHeight);
activity.addContentView(cameraViewControl, layoutParamsControl);
return view;
}
public void setMarginTopForHat(int height) {
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) btnCapture.getLayoutParams();
layoutParams.setMargins(0, height + 30, 0, 0);
btnCapture.setLayoutParams(layoutParams);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
camera = Camera.open(1);
camera.setDisplayOrientation(90);
} catch (RuntimeException e) {
Toast.makeText(getContext(), "Device camera is not working properly, please try after sometime.",
Toast.LENGTH_LONG).show();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
((ViewGroup) cameraViewControl.getParent()).removeView(cameraViewControl);
camera.stopPreview();
camera.release();
camera = null;
previewing = false;
}
}
fragment_mirror.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<SurfaceView
android:id="@+id/cameraSurfaceViewFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
Извините, не понял. Должен ли я изменить метод 'addContentView()' на другой метод? Потому что я пытался добавить в 'addContentView()' различные параметры (такие как 'View view = inflater.inflate (R.layout.fragment_mirror, container, false);' и это не сработало. –
Вы не хотите для использования 'addContentView()', так как это то, что вызывает представление шляпы над всем остальным. Вы хотите использовать метод 'addView()' какой бы ViewGroup вы не решили добавить шляпу View. Я бы предложил добавить ее прямо перед 'view', прежде чем вы вернете это в' onCreateView() '. Возможно, вам придется изменить макет' fragment_mirror', однако, в зависимости от того, какой тип ViewGroup у него есть как его корень. Если вы хотите опубликовать этот макет, я может быть более конкретным. –
Я отредактировал свой вопрос и разместил макет MirrorFragment. Пожалуйста, посмотрите. –