0

私はアンドロイドプログラミングが初めてで、小さな問題に遭遇しました。お役に立てれば幸いです。

私が使用して作成しているライブ壁紙の長方形を作成しています:

void drawFrame() {
        final SurfaceHolder holder = getSurfaceHolder();

        Canvas c = null;
        try {
            c = holder.lockCanvas();
            if (c != null) {
                Paint paint = new Paint();
                paint.setColor(Color.CYAN);
                Paint ypaint = new Paint();
                ypaint.setColor(Color.RED);
                Paint ppaint = new Paint();
                ppaint.setColor(Color.GREEN);

                drawVerStripes(c, ppaint, 0,20);
                drawVerStripes(c, paint, 50,20);
                drawVerStripes(c, ypaint,0,10);
            }

        } finally {
            if (c != null)
                holder.unlockCanvasAndPost(c);
        }

関数:

パラメータ:
width: 長方形の幅
space: 最後の rect とこの rect の差

    int y=0;
    int oldY=0;
    private void drawVerStripes(Canvas c, Paint paint, int space, int width) {


        y=oldY+space;

        c.drawRect(y, 0, y+width,c.getHeight(), paint);

        oldY=y;
    }

その結果、長方形が画面の片側に非常に速く移動します。私は彼らが画面にとどまり、動かないようにしたい.
つまり、drawVerStripes がすべてのフレームではなく 1 回だけ実行される方法はありますか。

4

2 に答える 2

0

drawFrame メソッドは各フレームで呼び出されます。デバイスのリフレッシュ レートが 70 の場合、メソッドは 1 秒間に 70 回呼び出されます。x または y 座標を 1 増やすと、x または y 座標で 70 ピクセル移動します。リフレッシュ レートに依存しない移動を行う必要があります。

1) 最後の画面更新から経過した時間であるデルタ時間を計算します。2) 四角形を毎秒何ピクセル移動させるかを決定します。

四角形を x 方向に 50 ピクセル移動させたいとします。

次に、次の操作を行います。x += deltaTime * 50.

long startTime = System.nanoTime(); // Execute before the first time your drawFrame executes
float deltaTime = (System.nanoTime()-startTime) / 1000000000.0f; // In drawFrame method calculate
long startTime = System.nanoTime(); // Execute after calculating delta time. 
于 2013-06-11T15:21:32.883 に答える
0

drawFrame の先頭で y と oldY を 0 に設定し直す必要があると思います。

于 2013-06-11T16:19:14.307 に答える