0

ユーザーが画面に触れたときに画像に円を描くアプリを開発しています。また、ユーザーは画面上で指を動かしてこの円を動かすことができます。しかし、移動のアクションでは、ラグがたくさん見られます...

ユーザーがこのギャラリーの画像を開き、その後、私がすることは次のとおりです。

1) ユーザーが画面に触れる

2) スクリーンポイントとイメージポイントの対応を計算 (+100ms)

3)描画:(+200ms)

-create a bitmap with the size of the original image

-create a canvas based on the previous bitmap

-canvas.drawimage, draw the original image

-canvas.drawcircle, draw the circle

4)結果のビットマップをイメージビューに設定します(+100ms)

ユーザーが指を動かすたびに、すべてのプロセスを実行して 400 ミリ秒を無駄にします...多くの時間を費やします

画像の解像度が非常に重要であることは知っていますが、640x480 の画像を使用しているため、それほど大きな画像ではありません...そして、samsung galaxy s2 でアプリをテストしているので、観察していましたより良い結果...

4

1 に答える 1

0

ここで、各フレームに画像を割り当てていますが、これは非常にコストがかかり、5 回目から 10 回目の描画ごとに GC が実行される可能性があります。私にとっては、ImageView で描画メソッドを派生させてオーバーライドする方がはるかに良いでしょう。このように、super.draw() を呼び出した後に円を描くだけで、CPU の多くの作業を節約できます。このようなもの:

new ImageView(null){
    Paint paint = new Paint();
    int cx,cy,radius = 10;
    public void setPoint(int x,int y){
        cx = x;cy = y;
    }
    public void draw(android.graphics.Canvas canvas) {
        super.draw(canvas);
        canvas.drawCircle(cx, cy, radius, paint);
    };
}

画像 (1 回) と指の位置 (タッチ イベント後) を設定した後、invalidate() を呼び出すだけです。

于 2012-11-27T13:03:27.373 に答える