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

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

Войти
Регистрация
Восстановить пароль
 
RC_86
Сообщений: n/a
#1

surfaceview multiple threads - Программирование Android

21.07.2013, 13:50. Просмотров 441. Ответов 0
Метки нет (Все метки)

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


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
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();
 
}
}
А вот сами потоки.
Первый
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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);
}
 
}
Второй
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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.Я так понял что канвас перезатераеться вторым изображением.
Я разделил на два отдельных потока, потому что в будущем там должна быть реализована анимация двух разных картинок.
Вопрос в том, как мне сделать так чтобы у меня две картинки НЕ перезатерали друг друга.
И вообще правильно создавать отдельные потоки?? В моем случае это будут два изображения которые движутся с разной скоростью и отражаются от стенок. Заранее большое спасибо за помощь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2013, 13:50     surfaceview multiple threads
Посмотрите здесь:

Восстановление SurfaceView - Программирование Android
Кто работал с SurfaceView, помогите! Рисую на SurfaceView с помощью onTouchEvent(), без потока, все замечательно рисует, сворачиваю...

SurfaceView + onKeyDown - Программирование Android
Проблемка очень простая - не реагирует на onKeyDown в классе, наследующем SurfaceView. Исправьте мою криворукость, пожалуйста, подскажите,...

Ошибка в SurfaceView - Программирование Android
есть игра. отрисовка идет через SurfaceView и поток привязанный к нему. ошибка возникает в следующем моменте - я открываю сам игровой...

Работа с SurfaceView - Программирование Android
Отрисовка в SurfaceView никогда не вызывала трудностей, до тех пор, пока не запустил приложение на телефоне с экраном 1920х1080px. Фпс упал...

Мерцание в SurfaceView - Программирование Android
Всем привет! Рисую на SurfaceView фон и на нем анимированные объекты. Кадры беру из атласа. Появилось мерцание, причем фон не мерцает а...

SurfaceView не отображается - Программирование Android
Учусь программировать по книге П. Дейтел, Х. Дейтел "Android для программистов. Создаём приложения". Делаю уже 5 приложение, но это не...

Узнать фон SurfaceView - Программирование Android
Как узнать фон SurfaceView? mSurfaceViewLeft = (SurfaceView)findViewById(R.id.surfaceViewLeft); mSurfaceViewRight =...

SurfaceView&Canvas - Программирование Android
Подскажите, как реализовать отображение, например, карандашика, когда рисуешь на Canvas в SurfaceView. В какую сторону копать, чтобы такое...

Простейший пример SurfaceView - Программирование Android
Здравствуйте. Напишите пожалуйста простейшую программу рисующую точку на экране с помощью SurfaceView.

SurfaceView поверх ImageView - Программирование Android
До этого вместо Surface использовался обычный View и Canvas в нём, но потребовалась анимация. Просто в background картинку засунуть не...

SurfaceView сворачивание программы - Программирование Android
@Override protected void onDraw(Canvas canvas){ //рисует игровое поле super.onDraw(canvas); Paint paint = new Paint();...

Вращение фигуры в SurfaceView - Программирование Android
Сейчас фигура вращается с помощью функции glRotate, все работает, и она вращается при запуске. Как сделать, чтобы фигура вращалась не...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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