クラス ShapesActivity.java があり、そのレイアウトにボタンがあります。ビューを拡張する別のファイル ShapesView.java があります。作成した円を移動するために、このクラスに AsyncTask があります。ShapesActivity.java クラスの停止ボタンをクリックすると、スレッドを新たに作成したくないため、円はどこでも停止する必要があります。ShapesView でボタン クリックのイベント ハンドラーを実装できないため、cancel(true) を呼び出して新しいスレッドの作成を停止することはできません。誰か助けてくれませんか
質問する
59 次
2 に答える
0
あなたの AsyncThread は、ビューの作成またはビューのアニメーション化を担当していますか? あなたは、STOP を押すと、アニメーションとは何の関係もない、それ以上の CREATION を防ぐべきだと言っています。
スレッドがビューをアニメーション化しており、STOP でアニメーションを停止する必要があると言いたい場合は、アニメーション ループにアニメーションを停止するように指示するフラグを設定するメソッドを AsyncTask 実装に追加するだけです。次に、STOP ボタンを呼び出す必要がありますmAnimThread.stopAnimating()
。何かのようなもの:
class MyAnimThread extends AsyncTask<Void, Void, Void>
{
boolean mRunning = true;
public void stopAnimating()
{
mRunning = false;
}
@Override
protected Void doInBackground(Void... params)
{
while(mRunning)
{
//animate
}
return null;
}
}
独自のソース コードを追加すると、問題の理解に役立ちます。
于 2012-06-22T20:23:25.723 に答える
0
単純に円をアニメーション化しようとしていますか? もしそうなら、物事を複雑にしすぎている可能性があります。そのようなことを達成するために AsyncTask は本当に必要ありません。カスタム ビューの draw() メソッドをオーバーライドし、提供された Canvas オブジェクトにペイントするだけです。
于 2012-06-22T19:43:12.403 に答える