Android - показать линии сетки на камере

Я новичок в разработке приложений для Android. Я хочу создать приложение, которое получает поток с камеры и показывает на SurfaceView или на FrameLayout.

Мне нужна опция, показанная выше при потоковой передаче «Показать линии сетки», когда пользователь нажимает на нее, линии сетки будут отображаться в потоке камеры.

Может ли кто-нибудь помочь мне, как я могу показать линии сетки при потоковой передаче с камеры ???

Любая помощь будет ценна...

Спасибо. Мохсин


person mohsin.mr    schedule 01.08.2012    source источник


Ответы (2)


Если вы хотите динамически рисовать линии в соответствии с размером экрана, вам следует использовать следующий код в классе предварительного просмотра камеры.

    @Override  
    protected void onDraw(Canvas canvas)  
    { 
        if(grid){
        //  Find Screen size first  
        DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();  
        int screenWidth = metrics.widthPixels;  
        int screenHeight = (int) (metrics.heightPixels*0.9);  

        //  Set paint options  
        paint.setAntiAlias(true);  
        paint.setStrokeWidth(3);  
        paint.setStyle(Paint.Style.STROKE);  
        paint.setColor(Color.argb(255, 255, 255, 255));  

        canvas.drawLine((screenWidth/3)*2,0,(screenWidth/3)*2,screenHeight,paint);
        canvas.drawLine((screenWidth/3),0,(screenWidth/3),screenHeight,paint);
        canvas.drawLine(0,(screenHeight/3)*2,screenWidth,(screenHeight/3)*2,paint);
        canvas.drawLine(0,(screenHeight/3),screenWidth,(screenHeight/3),paint);
        }
    } 

Вам также необходимо добавить следующую строку в конструктор класса предварительного просмотра камеры:

this.setWillNotDraw(false);
person Jan Ziesse    schedule 30.04.2014
comment
В этом случае вы устанавливаете параметры рисования в конструкторе и экономите ресурсы. Параметры рисования постоянны, и метод onDraw() будет вызываться много раз. - person Oximer; 11.02.2016

Если вы хотите наложение поверх предварительного просмотра камеры, вам придется написать свою собственную камеру. Это довольно сложная тема, чтобы охватить один ответ, но вот руководство, которое поможет вам начать:

http://developer.android.com/guide/topics/media/camera.html#custom-camera

Если у вас есть работающая камера, просто отредактируйте XML-макет активности вашей камеры. Используйте RelativeLayout, это позволит вам размещать другие представления (кнопки, изображения) поверх поверхности предварительного просмотра.

Вот пример макета XML, совместимого с руководством, упомянутым выше. Поверхность предварительного просмотра создается программно и помещается в FrameLayout (подробнее в руководстве по ссылке выше). ImageView будет отображаться поверх поверхности предварительного просмотра.

<?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"
    >

  <FrameLayout
    android:id="@+id/camera_preview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />

  <ImageView
    android:id="@+id/grid"
    android:src="@drawable/your_grid_drawable"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />

</RelativeLayout>

Вам также нужно будет разместить там кнопку захвата и кнопку переключения сетки, но вы должны получить представление о том, как это сделать, из приведенного выше примера. Просто добавьте больше элементов в RelativeView и расположите их, как в обычном макете.

person foxter    schedule 01.08.2012