Алло,
У меня есть действие, макет которого сделан из одного FrameLayout. У меня есть класс, который расширяет вид, который затем добавляется в этот макет.
Я хочу постоянно рисовать в этом виде, как в игровом цикле.
Проблема в том, что я новичок в Android, и эта тема не имеет смысла ..
Могу ли я действительно не обновлять макет, если я не в основном потоке пользовательского интерфейса?
Как мне начать инициализацию потоков? (
РЕДАКТИРОВАТЬ :: Это то, что я придумал, но это не обновляет мой кадр с чем-либо.
public class GameFrame extends View
{
private GameThread m_gt;
public GameFrame(Context context, int width int height){
//do some initialisation stuff
}
public GameThread getGameThread(){
if(m_gt != null){
return m_gt;
}else{
m_gt = new GameThread(this);
return m_gt;
}
}
@Override
public void onDraw(Canvas canvas){
//Draw loads of stuff
}
public class GameThread extends AsyncTask<Void, Void, Void>
{
private GameFrame m_gf;
public GameThread(GameFrame gf){
m_gf = gf;
}
@Override
protected void onProgressUpdate(Void... arg0){
System.out.println("Wahoo");
m_gf.invalidate();
}
@Override
protected Void doInBackground(Void... arg0) {
long start, end;
while(some bool){
System.out.println("Threadin'");
publishProgress();
//Fiddle with some values
}
return null;
}
}
}
А затем инициализировать его в основной деятельности:
private FrameLayout frame;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
...
frame = (FrameLayout) findViewById(R.id.gameframe);
GameFrame gf = new GameFrame(this, width, height);
frame.addView(gf);
gf.getGameThread().execute();
}
Правильно ли мое понимание Async? Должна ли эта работа выдавать действительный код в onDraw?
Я, наверное, должен сказать, что распечатки "вау" и "нити" печатаются много раз, поэтому что-то должно происходить правильно. Что еще более важно, если он напечатал «вау», то, конечно, он должен затем перерисовать мой вид ... но ничего не происходит: (