2017-01-04 12 views
0

私はPaintCanvasを使いたいと思っています。publishProgressを使用すると、基本的に何かをペイントします。Androidスタンドの背景にペイント

あなたの誰かが私のコードに何が間違っているのか、なぜこれが何かをペイントしていないのかどうかを教えてくれれば幸いです。

注。このすべては、あなたが新しいキャンバスインスタンス上に描画するのであなたのコードが描画されない

@Override 
    protected void doInBackground(Void... params) { 

      publishProgress(); // Run onProgressUpdate() method 
     } 

    } 

@Override 
    protected void onProgressUpdate(Void... params) { 
     // Here you can access the UI thread 
     Canvas canvas = new Canvas(); 
     Paint pa1= new Paint(); 
     pa1.setColor(Color.RED); 
     pa1.setStyle(Paint.Style.FILL); 
     pa1.setStrokeWidth(50); 

     canvas.drawLine(0, 0, 100, 100, pa1); 
    } 
+1

キャンバスが画面上のものに接続されていません。 'onProgressUpdate'が進行状況を表示するために使用できるカスタムビューを作成したいと思うかもしれません。 –

+0

これで、 'extends view'で新しいクラスを作成し、' onProgressUpdate() 'から' ondraw() 'を呼び出す必要があると思います。それですか? – difegui

+1

ビューはビュー階層の一部である必要がありますが、それでも画面に表示されません。だから、新しいビューを作成する必要はありません。アクティビティーのレイアウトにビューを定義してから、そのビューを見つける必要があります。実際の図面をビューの 'onDraw'メソッドに入れて[@Vova s​​uggests](http://stackoverflow.com/a/41469887/535871)にします。 –

答えて

2

キャンバスは、ビットマップまたはビューのいずれかに描画する必要があります。ビットマップに描画するには、空のビットマップを作成し、それをコンストラクタのCanvasに渡します。ビューに描画するには、カスタムビューを作成し、Canvasを渡すonDraw関数をオーバーライドします。

ビットマップへの描画は、ビットマップを独自のキャンバスに描画するビューがない限り、実際には表示されません。