0

クラス ShapesActivity.java があり、そのレイアウトにボタンがあります。ビューを拡張する別のファイル ShapesView.java があります。作成した円を移動するために、このクラスに AsyncTask があります。ShapesActivity.java クラスの停止ボタンをクリックすると、スレッドを新たに作成したくないため、円はどこでも停止する必要があります。ShapesView でボタン クリックのイベント ハンドラーを実装できないため、cancel(true) を呼び出して新しいスレッドの作成を停止することはできません。誰か助けてくれませんか

4

2 に答える 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 に答える