私は1つのFrameLayoutでレイアウトされたアクティビティを持っています。このレイアウトに追加されたViewを継承するクラスがあります。
ゲームループのように、このビューに引き続き描画したいと考えています。
問題は、私は、メインUIスレッドにいる場合を除き
私は本当にレイアウトを更新できません..私はAndroidに新たなんだと、このスレッドのようなものは何も意味を作っていないのですか? スレッドを初期化するにはどうすればよいですか? :(
EDIT ::主な活動でそれを初期化するために、これは私が作ってみたものですが、それは何で私のフレームを更新しません
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();
}
は
私はおそらく、プリントアウト「ワフー」と「スレッド」と言うべきか。この作品はonDrawで有効なコードを特定すべきか?非同期の私の理解は正しいです何かので何回もプリントアウトされています右に起こっている必要があります。それは「ワフー」を印刷したより決定的ならば、確かにそれは、次の私のビューを再描画する必要があります...が、何も起こりません:(
)あなたはasynctaskが走っている間に、メインUIを更新し続けたい場合は、あなたがpublishProgress(経由でこれを行うことができますthisチェックアウト、コメントで言ったように、スレッドはまた
を走った後、キャンバスを描く必要があります。[this](http://developer.android.com/guide/topics/graphics/2d-grap)を参照してください。 hics.html)記事。 – clemp6r