Как добавить SurfaceView в XML-разметку

Рейтинг: 1Ответов: 1Опубликовано: 04.05.2015

Есть класс GameActivity extends Activity, в нем получаю экземпляр класса SurfaceView - surf:

super.onCreate(savedInstanceState);
surf = new GameSurface(this);
this.setContentView(surf); //  размещается на GameActivity

и есть файл разметки gameactivity.xml, в котором размещены кнопки управления.
Если подключаю через метод setContentView(R.layout.gameactivity), то отображается разметка, а прорисовка не идет.

Как сделать чтоб кнопки были внизу, а сверху было игровое поле?

Ответы

▲ 3

Вам нужно указать место для вашего класса-наследника SurfaceView(GameSurface) на общей XML-разметке активити (gameactivity.xml), а не подключать его отдельно.
Этот класс обязательно должен содержать конструктор с аттрибутами, а на разметке указывается полный путь до вашего класса (включающий имя пакета)

package myapp.views; // имя пакета класса-наследника SurfaceView

public MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {

 //конструктор без атрибутов
public MySurfaceView(Context context) { 
super(context);
 ...
}

 //обязателен конструктор с атрибутами
public MySurfaceView (Context context, AttributeSet attributeSet) { 
super(context, attributeSet);
getHolder().addCallback(this);
 ...
}
 ...
}

В вашей разметке (gameactivity.xml) определяете местоположение своего SurfaceView с указанием полного пути до класса:

<myapp.views.MySurfaceView
  android:id = "@+id/mySurfaceView"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" />

Получить доступ к SurfaceView из активити можно методом findViewById():

SurfaceView mySurface = (SurfaceView) findViewById(R.id.mySurfaceView);

пример

PS: ваш surf не метод, а экземпляр класса