Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Marat7777777
0 / 0 / 0
Регистрация: 15.08.2015
Сообщений: 2
#1

Рисование поверх превью фотокамеры - Программирование Android

17.08.2015, 01:22. Просмотров 487. Ответов 0
Метки нет (Все метки)

Уважаемые знатоки, подскажите пожалуйста, что не так, почему один вид перекрывает другой, а не рисует поверх камеры?

У меня разметка имеет следующий вид:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/main_preview"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:contentDescription="@string/contentdescr" >
 
 <FrameLayout
      android:id="@+id/camera_preview"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:contentDescription="@string/contentdescr"
      android:measureAllChildren="false" >
 </FrameLayout>
 </RelativeLayout>
Далее имеется два класса, один для превью камеры, другой для рисования над ней кнопок и тп.
1 класс - превью камеры:
Java
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
public class CameraClPrewiew extends SurfaceView implements SurfaceHolder.Callback {
 
        public SurfaceHolder mHolder;
        public Camera mCamera;
    
        public CameraClPrewiew (Context context, Camera camera) {
             super(context);
             mCamera=camera;
             mHolder=getHolder();
             mHolder.addCallback(this);
             mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
         }
 
        public void surfaceCreated(SurfaceHolder holder) {
            mCamera=Camera.open();
                try {
                    if (holder!=null)
                    mCamera.setPreviewDisplay(holder);                      
                } catch (IOException e) {
                    mCamera.stopPreview();
                    mCamera.release();
                }
                   mCamera.startPreview();
                }
 
 
 
          public void surfaceDestroyed(SurfaceHolder holder) {
                mCamera.stopPreview();
                mCamera.release();
          }
 
          public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
                    mCamera.startPreview();
        }
    }
2 класс для рисования:
Java
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
public class CameraClDraw extends SurfaceView implements Runnable {
        public AndroidGraphics g;
        private AssetManager asset;
        Bitmap framebuffer;
        Thread renderThread = null;
        SurfaceHolder mholder;
        volatile boolean running = false;
        Canvas canvas;
        Rect dstRect;
        
        public CameraClDraw (Context context, Bitmap framebuffer) {
                super(context); 
                this.framebuffer=framebuffer;
                g=new AndroidGraphics(asset, framebuffer);                  
                mholder = this.getHolder();                    
           }
        
        public void resume() {
            running = true;
            renderThread = new Thread(this);
            renderThread.start();
        }
 
        @Override
        public void run() {
            dstRect = new Rect();           
            while(running) {
            if(!mholder.getSurface().isValid())
            continue;
            canvas = mholder.lockCanvas();
            canvas.getClipBounds(dstRect);
            canvas.drawBitmap(framebuffer, null, dstRect, null);        
            mholder.unlockCanvasAndPost(canvas);
            }
            
        }   
        public void pause() {
            running = false;
            while(true) {
            try {
                renderThread.join();
                break;
                } catch (InterruptedException e) {
            }
        }
    }
}
и основная активность:
Java
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
public class CameraCl extends Activity {
    
    public int windowh,windoww;
    private CameraClPrewiew cam;
    private CameraClDraw camDraw;
    public Camera camera;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);  
    requestWindowFeature(Window.FEATURE_NO_TITLE);
   getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
    boolean isLandscape = getResources().getConfiguration().orientation== Configuration.ORIENTATION_LANDSCAPE;
    windowh = getWindow().getWindowManager().getDefaultDisplay().getHeight();
    windoww = getWindow().getWindowManager().getDefaultDisplay().getWidth();
    int frameBufferWidth = isLandscape ? windoww : windowh;
    int frameBufferHeight = isLandscape ? windowh : windoww;
    Bitmap framebuffer = Bitmap.createBitmap(frameBufferWidth,frameBufferHeight, Config.RGB_565);
    setContentView(R.layout.activity_class_camera);
    cam=new CameraClPrewiew (this, camera); 
    camDraw = new CameraClDraw(this, framebuffer);
    FrameLayout camlayout=(FrameLayout)findViewById(R.id.camera_preview);       
    camlayout.addView(cam); // <---
    camlayout.addView(camDraw); // <---
    }
    @Override
    public void onResume() {
    super.onResume();
    camDraw.resume();
    }
    
    @Override
    public void onPause() {
    super.onPause();
    camDraw.pause();
    }
}
Так вот, у меня показывает либо камера, либо черный прямоугольник, но никак не получается рисовать поверх камеры, т.е. прямоугольник получается непрозрачный

Спасибо тем, кто откликнится!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2015, 01:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рисование поверх превью фотокамеры (Программирование Android):

Запустить новое активити из фотокамеры? - Программирование Android
Заголовок получился фиговый. Задача такая: выбрать изображение из галереи (нативного приложения Gallery) или снять на камеру. После этого...

Верстка в AndroidStudio, превью - Программирование Android
Доброго времени суток. Столкнулись с проблемой, хотя даже не с проблемой, а с неудобством. В AndroidStudio превью активити не...

Вывод измененной превью с камеры на ImageView - Программирование Android
Здравствуйте. Мне необходимо выводить на экран измененное изображение с камеры. Для это беру массив изображения, перевожу его в растр,...

Рисование 2d поверх 3d - OpenGL
Я знаю что вопрос задавался не раз и не два, но нифига не понял. Нужно рисовать с помощью opengl поверх экрана. Программа генерирует...

Рисование поверх jpg - Delphi
Дельфи 7 uses jpeg Загружаю 1.jpg в Image по LoadFromFile. Пытаюсь рисовать поверх LineTo. Выдает, что не может - нужен битмап. ...

Рисование поверх экрана - C++ Builder
Всем привет. Не нашел в интернете решения. Как нарисовать объект поверх экрана чтобы он находился там постоянно (вне формы)? Например, как...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2015, 01:22
Привет! Вот еще темы с ответами:

Рисование поверх формы - C++ Qt
У меня есть форма, на ней рисую различные кнопки и текст-браузеры.(имею ввиду Дизайнер Кьюта). В самом коде я создаю картинки QImage. Рисую...

Рисование поверх страницы - HTML, CSS
Привет. Ребята, думаю над следующей задачей - есть страничка, поверх которой мне надо расположить всякие мелкие элементы, типа...

Рисование поверх экрана - C#
Рисую на экране изображение, в обработчике Timer есть проверка, если итерация делится без остатка на некое число, то отрисовка...

.NET 4.x Рисование поверх контролов - C#
Собственно, есть контролы, есть форма, надо нарисовать линию по координатам поверх контролов. private void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru