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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Проверка логина http://www.cyberforum.ru/android-dev/thread1515674.html
Привет! Давно читаю ваш форум, всегда находил решение своих проблем. Но вот сейчас надо сделать приложение на Android, и у меня ступор. :wall: Сам прогаю на Java, не очень давно, правда. По сайту...
Программирование Android Приложение для прохождения теста Подскажите, пожалуйста, идеи для создания приложения теста. То есть идея есть, никак не могу найти как реализовать такое как в обычных тестах. Есть вопрос, есть 4 варианта ответов, один из них... http://www.cyberforum.ru/android-dev/thread1515668.html
Программирование Android Объект интерфейса
Наткнулся на интерфейс Parcelable, в нем есть подинтерфейс-Parcelable.Creator<T>. Студия требует:According to Parcelable interface documentaion, "Classes implementing the Parcelable interface must...
Работа с БД, связывание таблиц "фильмы", "жанры", "режиссеры" Программирование Android
Ребят, всем привет! накидайте какие-нить идеи по реализации ситуация такая есть таблицы - "списки_жанров", "фильмы", "режиссеры" мне нужно на актитиви с добавлением фильмов иметь такие поля ...
Программирование Android Не играет фоновая музыка перед началом игры http://www.cyberforum.ru/android-dev/thread1515460.html
В моей игре,обычно в начале играла фоновая музыка.После того,как я добавил всякие разные активити,играть перестала.В коде всё правильно.что за баг не знаю
Программирование Android Использование фрагмента в качестве временного хранилища данных Коллеги,здравствуйте. Есть необходимость в создании временного хранилища для объектов(На время жизни приложения). Меня интересует, можно ли для этой цели использовать некий Fragment, который будет... подробнее

Показать сообщение отдельно
Marat7777777
0 / 0 / 0
Регистрация: 15.08.2015
Сообщений: 2

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

17.08.2015, 01:22. Просмотров 479. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru