2017-10-25 17 views
2

いくつかのオブジェクトセットを描画するために、onDraw()メソッドをオーバーライドするカスタムビューを実装しています。onDrawメソッドでキャンバス上の描画をデバッグするにはどうすればよいですか?

オブジェクトは、特定の方法で評価される座標に配置されているはずです。これらのオブジェクトを配置するコードは正しく動作しません(一部は描画されないか、他のオブジェクトによってオーバーレイされる)ので、行ごとに実行するためにデバッグを行う必要があります。ステップ。

私がエミュレータの画面に何も表示されていないcanvas.drawBitmap行が実行されているので、すべての描画が完了した後、実際の画像が画面に表示されます。

私の質問は:onDraw()コードをデバッグするには最適な(あるいは唯一の)方法はありますか?私はAdroid開発ポータルでいくつかの調査を行いましたが、投稿された質問では解決策を見つけることができませんでした。

答えて

1

不審なステートメントをコメントできます。

もう1つのオプションは、タイマーを使用することです。 - 異なるスレッドからのビューを頻繁に無効にし、onDrawの内部では、一定の時間が経過した場合にのみ別のステートメントを実行します。さまざまなステートメントに異なる時間を使用すると、アニメーションのように見えます。

1

私はエキスパートではありませんが、現時点ではグラフィックスのアクセラレーションは非常に複雑です。描画コマンドは描画リストに記録され、GPUに最適化されて描画されます。また、Android 5.0以降、CPUで処理する必要がある図面の一部は、バックグラウンドスレッドで実行できます(常に?)。一般的な背景については、https://source.android.com/devices/graphics/を参照してください。

次に、ツールについては、systraceを使用することをおすすめします。より多くの情報とそれを使用する方法の詳細な例については、Romain Guyの「Android Performance Case Study」とフォローアップ「Android Performance Case Study Follow-up」の優秀な記事(おそらく少し古いですが)をご覧ください。

また、Androidのドキュメント「Perfect GPU Use」もご覧ください。

これが正しいパスに設定されることを願っています。これは非常に複雑な問題です。

2

はこれを試していないが、それは正しい軌道に乗ってあなたを置く必要があります、あなたのonDrawメソッドの開始時に

  • キャンバス
  • メイクから幅と高さを使用して新しいビットマップを作成しますビットマップ
  • から新しいキャンバスは、あなたのドローを実行しますが、アンドロイドStudioデバッガからビットマップを検査することができ、あなたはまた、Dを描きたい場合は、すべての描画
  • を呼び出して更新します
  • このキャンバスの上に呼び出し、画面へのATA、あなたはあなたの完全なビットマップと、元のキャンバスにdrawBitmap使用することができますが、これは

生産コードでこれを放置しないでください

@Override 
public void onDraw(Canvas canvas) { 
    Bitmap screenBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas screenCanvas = new Canvas(screenBitmap); 

    /* Run draw calls on screenCanvas, inspect screenBitmap for result*/ 
} 
をデバッグするために必要とするべきではありません
関連する問題