powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / Android [игнор отключен] [закрыт для гостей] / SurfaceView
25 сообщений из 45, страница 1 из 2
SurfaceView
    #38905549
Здравствуйте! Начинаю разбираться с SurfaceView. Нашёл этот пример в интернете, но при сворачивании программы вылетает ошибка.
Помогите её миновать.
...
Рейтинг: 0 / 0
SurfaceView
    #38905561
...
Рейтинг: 0 / 0
SurfaceView
    #38907087
Во всех примерах прилагается такой код. Господа давайте его усовершенствуем и выложим сюда.
...
Рейтинг: 0 / 0
SurfaceView
    #38907091
...
Рейтинг: 0 / 0
SurfaceView
    #38907167
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нам, как будто делать нечего больше сидеть и запускать какой то код и ловить, что за за ошибка там выскакивает.


новичкам, сперва хотя бы, научится логи смотреть.
...
Рейтинг: 0 / 0
SurfaceView
    #38907639
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВолодяХаритоновЗдравствуйте! Начинаю разбираться с SurfaceView. Нашёл этот пример в интернете, но при сворачивании программы вылетает ошибка.
Помогите её миновать.
Обычно к таким сообщениям текст ошибки и стек выкладывают.
...
Рейтинг: 0 / 0
SurfaceView
    #38909302
Здравствуйте! Выкладываю текст ошибки и стек.

Текст ошибки:
В приложении "SurfaceView" произошла ошибка.

Стек:
03-19 10:27:22.280: E/AndroidRuntime(6014): FATAL EXCEPTION: Thread-526
03-19 10:27:22.280: E/AndroidRuntime(6014): java.lang.NullPointerException
03-19 10:27:22.280: E/AndroidRuntime(6014): at com.example.surfaceview.GameView.onDraw(GameView.java:94)
03-19 10:27:22.280: E/AndroidRuntime(6014): at com.example.surfaceview.GameLoopThread.run(GameLoopThread.java:26)
...
Рейтинг: 0 / 0
SurfaceView
    #38909303
Выкладываю снова, потомучто выше ссылка уже неактивна
http://zalil-slil.rusfolder.net/files/upload/?session=20177020b2a5a84aa7731255aa0a18a4
...
Рейтинг: 0 / 0
SurfaceView
    #38910310
Пожалуйста, помогите очень надо.
...
Рейтинг: 0 / 0
SurfaceView
    #38910501
wamaco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВолодяХаритоновПожалуйста, помогите очень надо.
читайте про потоки, до просветления!
...
Рейтинг: 0 / 0
SurfaceView
    #38910587
Я читал про потоки в данном вопросе я не смог понять в чём причина ошибки.
В чём причина нежелания мне помочь? Если файл не хотите качать давайте я сюда выложу исходники

activity_main.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/qwe"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1" >

        <SurfaceView
            android:id="@+id/surfaceView1"
            android:layout_width="600dp"
            android:layout_height="600dp"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true" />
    </RelativeLayout>

</LinearLayout>



GameLoopThread
Код: 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.
package com.example.surfaceview;

import android.annotation.SuppressLint;
import android.graphics.Canvas;

public class GameLoopThread extends Thread {

	private GameView view;
	private boolean running = false;

	public GameLoopThread(GameView view) {
		this.view = view;
	}

	public void setRunning(boolean run) {
		running = run;
	}

	@SuppressLint("WrongCall")
	public void run() {
		while (running) {
			Canvas c = null;
			try {
				c = view.surfaceHolder.lockCanvas();
				synchronized (view.surfaceHolder) {
					view.onDraw(c);
				}
			} finally {
				if (c != null) {
					view.surfaceHolder.unlockCanvasAndPost(c);
				}
			}
		}
	}
	
}



GameView
Код: 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.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
package com.example.surfaceview;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class GameView extends SurfaceView {

    private Bitmap bmp;
	private GameLoopThread gameLoopThread;
    private int x = 0;  
    private int xSpeed = 1;
    Context context;
    
    SurfaceHolder surfaceHolder;
    SurfaceView surfaceView1;
    
	public GameView(Context context, SurfaceView surfaceView1) {
		super(context);
		
		this.context = context;
		this.surfaceView1 = surfaceView1;
		init();
	}

	public GameView(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.context = context;
		init();
	}

	public GameView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		this.context = context;
		init();
	}
	
    public void init() {
	    surfaceView1.setZOrderOnTop(true); 
	    surfaceHolder = surfaceView1.getHolder();
	    surfaceHolder.setFormat(PixelFormat.TRANSPARENT);
	    
	    gameLoopThread = new GameLoopThread(this);
	    
		surfaceHolder.addCallback(new SurfaceHolder.Callback() {
			@Override
			public void surfaceDestroyed(SurfaceHolder holder) {
				boolean retry = true;
				gameLoopThread.setRunning(false);
				while (retry) {
					try {
						gameLoopThread.join();
						retry = false;
					} catch (InterruptedException e) {
					}
				}
			}

			@Override
			public void surfaceCreated(SurfaceHolder holder) {
				gameLoopThread.setRunning(true);
				gameLoopThread.start();
			}

			@Override
			public void surfaceChanged(SurfaceHolder holder, int format,
					int width, int height) {
			}
		});
	    
	    bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
	}

    @Override
	protected void onDraw(Canvas canvas) {
		if (x == canvas.getWidth() - bmp.getWidth()) {
			xSpeed = -1;
		}
		if (x == 0) {
			xSpeed = 1;
		}
		x = x + xSpeed;
		canvas.drawColor(Color.BLACK);
		canvas.drawBitmap(bmp, x, 10, null);
	}

}



MainActivity
Код: 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.
package com.example.surfaceview;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceView;

public class MainActivity extends Activity {

	GameView gameview;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_main);
		
		SurfaceView surfaceView1 = (SurfaceView) findViewById(R.id.surfaceView1);
		gameview = new GameView(this, surfaceView1);
	}

	@Override
	protected void onResume() {
		super.onResume();
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}
...
Рейтинг: 0 / 0
SurfaceView
    #38914359
Здравствуйте!
По прежнему не решил свою проблемку.
Помогите, пожалуйста, или пример дайте
...
Рейтинг: 0 / 0
SurfaceView
    #38914376
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример таки отличается от приведенного кода... В какой именно строке ошибка?
...
Рейтинг: 0 / 0
SurfaceView
    #38914634
at com.example.surfaceview.GameView.onDraw(GameView.java:85)
at com.example.surfaceview.GameLoopThread.run(GameLoopThread.java:26)
...
Рейтинг: 0 / 0
SurfaceView
    #38914636
GameView в 94 строке просто я менял код и поэтому лог другой
я кстати выше написал в каких строках ошибки
...
Рейтинг: 0 / 0
SurfaceView
    #38914639
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВолодяХаритоновat com.example.surfaceview.GameView.onDraw(GameView.java:85)
at com.example.surfaceview.GameLoopThread.run(GameLoopThread.java:26)
Это что, шутка? Или не умеешь код подсвечивать?
ВолодяХаритонов
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
protected void onDraw(Canvas canvas) {
		if (x == canvas.getWidth() - bmp.getWidth()) {
			xSpeed = -1;
		}
		if (x == 0) {
			xSpeed = 1;
		}
		x = x + xSpeed;
		canvas.drawColor(Color.BLACK);
		canvas.drawBitmap(bmp, x, 10, null);
	}
...
Рейтинг: 0 / 0
SurfaceView
    #38914820
Не умею код подсвечивать, извините
...
Рейтинг: 0 / 0
SurfaceView
    #38914848
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВолодяХаритоновНе умею код подсвечивать, извините
В указанную строку я просто добавил ">>>" вначале и "<<<" в конце. Это в факе по форуму описано.
http://www.sql.ru/faq/faq_topic.aspx?fid=202
...
Рейтинг: 0 / 0
SurfaceView
    #38915157
Ну извините буду знать.
Давайте вернёмся к моему вопросу
...
Рейтинг: 0 / 0
SurfaceView
    #38915226
Фотография Джибс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне кажется, кто то что-то, откуда-то загуглил вставил
теперь жаждет пока "само собой" решится.
...
Рейтинг: 0 / 0
SurfaceView
    #38915257
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВолодяХаритоновДавайте вернёмся к моему вопросу
wadmanВ какой именно строке ошибка?
...
Рейтинг: 0 / 0
SurfaceView
    #38915383
Ошибки в этих двух строках:
at com.example.surfaceview.GameView.onDraw(GameView.java:82)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
@Override
	protected void onDraw(Canvas canvas) {
		if (x == canvas.getWidth() - bmp.getWidth()) {
			xSpeed = -1;
		}
		if (x == 0) {
			xSpeed = 1;
		}
		x = x + xSpeed;
		canvas.drawColor(Color.BLACK);
		canvas.drawBitmap(bmp, x, 10, null);
	}


at com.example.surfaceview.GameLoopThread.run(GameLoopThread.java:26)
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
@SuppressLint("WrongCall")
	public void run() {
		while (running) {
			Canvas c = null;
			try {
				c = view.surfaceHolder.lockCanvas();
				synchronized (view.surfaceHolder) {
					view.onDraw(c);
				}
			} finally {
				if (c != null) {
					view.surfaceHolder.unlockCanvasAndPost(c);
				}
			}
		}
	}
...
Рейтинг: 0 / 0
SurfaceView
    #38915473
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему там не используется getHolder()?
...
Рейтинг: 0 / 0
SurfaceView
    #38915845
getHolder() используется в процедуре init()
Код: java
1.
2.
3.
4.
public void init() {
	    surfaceView1.setZOrderOnTop(true); 
	    surfaceHolder = surfaceView1.getHolder();
	    surfaceHolder.setFormat(PixelFormat.TRANSPARENT);
...
Рейтинг: 0 / 0
SurfaceView
    #38916038
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все таки придется тебе научиться пользоваться отладкой. У меня пример из 17394608 работает.

Смотри, где там null. Может битмап не грузится...
...
Рейтинг: 0 / 0
25 сообщений из 45, страница 1 из 2
Форумы / Android [игнор отключен] [закрыт для гостей] / SurfaceView
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]