1

Romain Guy の TextureView サンプル コード (http://pastebin.com/J4uDgrZ8) を試してみましたが、うまくいきました。しかし、lockCanvas(null) を lockCanvas(new Rect(x, y, x+20, y+20)) に変更すると、例がちらつき始めます。「lockCanvas(Rect)」が TextureView またはその他の理由でうまく機能しないようですか?

Android 4.0.3 で Motorola XOOM を使用しています。助けてくれてありがとう!

私が修正したコードは次のとおりです。

 public void run() {
        float x = 0.0f;
        float y = 0.0f;
        float speedX = 5.0f;
        float speedY = 3.0f;

        Paint paint = new Paint();
        paint.setColor(0xff00ff00);

        while (mRunning && !Thread.interrupted()) {
            //final Canvas canvas = mSurface.lockCanvas(null);
            **final Canvas canvas = mSurface.lockCanvas(new Rect((int)x, (int)y,
                                                               (int)(x+20.0f), (int)(y+20.0f)));**  
            try {
                canvas.drawColor(0x00000000, PorterDuff.Mode.CLEAR);
                canvas.drawRect(x, y, x + 20.0f, y + 20.0f, paint);
            } finally {
                mSurface.unlockCanvasAndPost(canvas);
            }

            if (x + 20.0f + speedX >= mSurface.getWidth() || x + speedX <= 0.0f) {
                speedX = -speedX;
            }
            if (y + 20.0f + speedY >= mSurface.getHeight() || y + speedY <= 0.0f) {
                speedY = -speedY;
            }

            x += speedX;
            y += speedY;

            try {
                //Thread.sleep(15);
                  **Thread.sleep(1);**
            } catch (InterruptedException e) {
                // Interrupted
            }
        }

よく調べてみると、"Thread.sleep(1)" と "lockCanvas(Rect)" が一緒になってちらつきが発生することがわかりました。lockCanvas(null) を使用する場合は、sleep(1) で問題ありません。それで、lockCanvas(Rect) は lockCanvas(null) ほど速くリフレッシュできませんか??

4

0 に答える 0