0

Eclipse IDE for Androidでは、現在1つの単純な問題と戦っています。私は次のようなコードを使用しています:

public class Reader extends Activity 
{
    // declarations
    private class GraphView extends View 
    {
        protected void onDraw(Canvas canvas) 
        {
            synchronized(this)
            {
                final Paint paint = mPaint;
                // some drawings
                myvoid(canvas,paint);
                // some drawings
            }
        }
    }
    void myvoid(Canvas c,Paint p)
    {
        int i=0;
        do //or for cycle
        {
            i++;
            c.drawText(Integer.toString(i),0,100,p); // <<<<<<<<<<<<<<<< Problem
        }
        while (i<100000);
    }
}

whileループが終了するまで、キャンバスとテキストは更新されません。その間、キャンバスは「ロック」されているようです。キャンバス上のループ内の進行状況を確認するにはどうすればよいですか?

ありがとう、トーマス。

4

3 に答える 3

1

問題は、Android が描画メソッドの結果を表示する時間を与えていないことです。ループの 1 つのステップを描画し、invalidate を呼び出して次のステップをトリガーする必要があります。Android は画面にテキストを描画し、カウンターを増やしてもう一度再描画しようとします。あなたのコードと私のバージョンを比較してください:

private class GraphView extends View {

    protected void onDraw(Canvas canvas) { // some drawings
        myvoid(canvas, paint);
        // some drawings
    }

    void myvoid(Canvas c, Paint p) {
        int i = 0;
        do // or for cycle
        {
            i++;
            c.drawText(Integer.toString(i), 0, 100, p);
        } while (i < 100000);
    }
}

無効化()を使用した私のバージョン:

private class GraphView extends View {
    int i = 0;
    Paint paint = new Paint();

    @Override
    public void draw(Canvas canvas) {
        canvas.drawText(Integer.toString(i), 0, 100, paint);
        i++;
        invalidate();
        super.draw(canvas);
    }
}
于 2013-03-19T10:38:06.727 に答える
0

これを試すことができると思います

imageView = (ImageView) this.findViewById(R.id.imageView1);

        Display currentDisplay = getWindowManager().getDefaultDisplay();
        @SuppressWarnings("deprecation")
        //float dw = currentDisplay.getWidth();
       // float dh = currentDisplay.getHeight();

        bitmap = Bitmap.createBitmap((int) dw, (int) dh,
            Bitmap.Config.ARGB_8888);
        canvas = new Canvas(bitmap);
        paint = new Paint();
        paint.setColor(Color.RED);
        imageView.setImageBitmap(bitmap);

キャンバスをビットマップイメージにしてから、ビットマップをイメージビューに設定してみてください

于 2013-03-19T09:55:33.737 に答える
0

次の手順に従います。

  • アクティビティにビューを設定する
  • プロセスを実行するためにセカンダリスレッドを開始します
  • スレッドでビューを無効にする

この例が役立つかもしれません: https://github.com/hamilton-lima/Bolinha/tree/master/src/com/example/bolinha

于 2013-03-19T10:37:50.430 に答える