5

ビットマップやパスなど、Canvasinの境界を超えるオブジェクトの一部の描画を防ぐ方法はありSurfaceViewますか?

オブジェクトCanvasのサイズを徐々に拡大すると、特にペイントがぼやけている場合、すべての速度が遅くなり、静止状態になり、コントロールを元に戻すまで数秒待たなければなりません。反応しません。画面上で指を動かしてオブジェクトを拡大縮小します。速すぎて拡大すると、描画が本当に遅くなります。

通常のキャンバスを使用したときと同じ問題はなかったViewので、何が遅くなっているのかわかりません。SurfaceView応答が速すぎて、混雑するかのようです。

したがって、これを改善するための 1 つのアイデアは、キャンバスの外への描画を防ぐことですが、SurfaceViewそのようなクリッピング オプションがあるかどうかはわかりません。

4

3 に答える 3

1

おそらく 1 つの解決策は、ソース/引数Canvas .drawBitmapを受け入れるメソッドの 1 つを使用して、の可視部分のみがレンダリングされるようにすることです。私は自分のプロジェクトでこれを行ってパフォーマンスを高速化し、いくつかのプロジェクトが部分的にしか表示されない場合があります。RectRectFBitmapSurfaceViewBitmaps

于 2013-03-13T12:01:11.120 に答える
1

キャンバスが実際に次元を超えて物事を描くかどうかはわかりませんが、それは賢明なことではありません。それでも、 を使用clipRect()してクリップ領域を定義できます。

フレームごとにぼかしのようなフィルターを適用していますか? それはかなり高価かもしれません。

また、タッチイベントでドローコールをトリガーしていますか? タッチ イベントは非常に迅速に生成され、レンダリング スレッドをあふれさせます。より遅い速度でイベントを取得することをお勧めします: https://groups.google.com/forum/?fromgroups=#!topic/android-developers/Oe6k1_bm38o

于 2013-03-25T14:23:18.467 に答える
0

アクティビティのレイアウトに SurfaceView を配置すると、次のようなパディング属性を使用できます。

android:paddingLeft="20dp"
android:paddingTop="20dp"
android:paddingRight="20dp"
android:paddingBottom="20dp"

それはこのように動作します:

パディング描写

キャンバスを描画するには、次のように境界線を動的に描画できます。

canvas.drawLine(1,1,canvas.getWidth()-1,1);  //Top border
canvas.drawLine(1,1,1,canvas.getHeight()-1);  //Left border
canvas.drawLine(1,canvas.getHeight()-1,canvas.getWidth()-1,canvas.getHeight()-1);  //Bottom border
canvas.drawLine(canvas.getWidth()-1,1,canvas.getWidth()-1,canvas.getHeight()-1);  //Right border
于 2013-03-21T05:16:03.443 に答える