surfaceview и dialog, есть проблема!

Ответить
star-w1
Сообщения: 18
Зарегистрирован: 08 апр 2012, 16:51

surfaceview и dialog, есть проблема!

Сообщение star-w1 » 25 дек 2012, 15:00

есть топик http://stackoverflow.com/questions/1055 ... -asynctask
по нему сделал вывод видео потока, все ок!
создал диалог(AlertDialog), впихнул туда View с видео и появилась проблема видео затемненное такое же как и весь экран(кроме диалога), причем это наблюдается только с потоком видео, если просто помещать рисунок или surfaceview с чем нить другим все ок!
Может кто сталкивался! Хелп плз)
тут ест два варианта или совсем убрать затемнение(что тоже что то не выходит) или под настроить surfaceview, но как(
Пробовал помещать контекст диалога (mv = new MjpegView(dialog.getContext());) не помогает.

star-w1
Сообщения: 18
Зарегистрирован: 08 апр 2012, 16:51

Re: surfaceview и dialog, есть проблема!

Сообщение star-w1 » 11 янв 2013, 20:41

похоже решить данную проблему нельзя из-за особенности surfaceview
выход - использовать отдельную активити на сесь экран. варианта с убиранием затемнения проходит(через тему окна) но вот с позиционированием тут косяк жесткий.

Romillionaire
Сообщения: 7
Зарегистрирован: 28 июн 2013, 11:26

Re: surfaceview и dialog, есть проблема!

Сообщение Romillionaire » 20 июл 2013, 20:09

Доброго времени суток.Пытаюсь разобраться с surfaceview.
Суть задачи следующая ,єсть два объекта, которые я запускаю в отдельных потоках.
В каждом обектерисуется изображение (мячик).


public class GameView extends SurfaceView implements SurfaceHolder.Callback{

public GameView(Context context) {
super(context);
getHolder().addCallback(this);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub

Thread oneThead = new Thread(new OneThread(getHolder(), getResources()));
oneThead.start();


Thread secondThead = new Thread(new SecondThread(getHolder(), getResources()));
secondThead.start();


}
}


А вот сами потоки.
Первый
public class OneThread implements Runnable{
private SurfaceHolder surfaceHolder;
private Bitmap brazukaBall;


public OneThread(SurfaceHolder surfaceHolder, Resources resources) {
this.surfaceHolder = surfaceHolder;
imageOne = BitmapFactory.decodeResource(resources, R.drawable.imageOne);
}

@Override
public void run() {
Canvas canvas;
canvas = surfaceHolder.lockCanvas(null);
canvas.drawBitmap(imageOne,68,87,null);
surfaceHolder.unlockCanvasAndPost(canvas);
}

}
Второй
public class SecondThread implements Runnable{
private SurfaceHolder surfaceHolder;
private Bitmap brazukaBall;


public SecondThread(SurfaceHolder surfaceHolder, Resources resources) {
this.surfaceHolder = surfaceHolder;
imageTwo = BitmapFactory.decodeResource(resources, R.drawable.imageTwo);
}

@Override
public void run() {
Canvas canvas;
canvas = surfaceHolder.lockCanvas(null);
canvas.drawBitmap(imageTwo,0,0,null);
surfaceHolder.unlockCanvasAndPost(canvas);
}

}

Проблема в том что на канвасе всегда изображения которое рисуется в SecondThread.Я так понял что канвас перезатераеться вторым изображением.
Я разделил на два отдельных потока, потому что в будущем там должна быть реализована анимация двух разных картинок.
Вопрос в том, как мне сделать так чтобы у меня две картинки НЕ перезатерали друг друга.
И вообще правильно создавать отдельные потоки?? В моем случае это будут два мячика которые движутся с разной скоростью и отражаются от стенок. Заранее большое спасибо за помощь :)

Ответить