Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рисование над превью камеры, Не удается рисовать над превью камеры 
:(
    Опции темы
curumb
Дата 17.8.2015, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.4.2010

Репутация: нет
Всего: нет



Уважаемые форумчане, подскажите пожалуйста, что не так, почему один вид перекрывает другой, а не рисует поверх камеры?
у меня показывает либо камера, либо черный прямоугольник, но никак не получается рисовать поверх камеры, т.е. прямоугольник получается непрозрачный, не пойму почему.
У меня разметка имеет следующий вид:
Код

<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 класс - превью камеры:
Код

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 класс для рисования: 
Код

public class CameraClDraw extends SurfaceView implements Runnable {

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;
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) {
}
}
}
}


и основная активность:
Код

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);    
[color=red]camlayout.addView(cam);
camlayout.addView(camDraw);[/color]
}
@Override
public void onResume() {
super.onResume();
camDraw.resume();
}

@Override
public void onPause() {
super.onPause();
camDraw.pause();
}
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0635 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.