1

キャンバスとサーフェス ビューを使用してアプリを作成しようとしていますが、キャンバスがすべてのデバイスに比例しているかどうかわからないため、将来的に多くの問題が発生するのではないかと心配しています。現在、携帯電話のUSBケーブルが機能しないため、エミュレータしか使用できません(わかっています..新しいものを入手する必要があります..)。

とにかく、キャンバスが座標を転送してすべてを比例させるかどうかを知りたいのですが、つまり、ポイント a に何かがある場合、その画面がデバイス上で (10, 10) としましょう。 100 X 100 (これは簡単な計算の例です) は、10 X 10 デバイスの点 (1, 1) になります。

これは本当に困っています...

ありがとう!

4

2 に答える 2

3

いいえ、そうではありません。座標(10,10)がある場合、それはすべてのデバイスで同じになります。私はあなたにscaleあなたの絵を提案したいと思います。

図面にscaleは、描画先のビットマップ(同じまま)を定義するだけです(画面サイズが変更されると、そのビットマップは引き伸ばされます)。

  1. 定数ビットマップを定義します。

    ビットマップgameScreen=Bitmap.createBitmap(getGameScreenWidth()、getGameScreenHeight()、Config.RGB_565);

  2. xとyの両方のスケールを取得します

    width = game.getWindowManager()。getDefaultDisplay()。getWidth(); height = game.getWindowManager()。getDefaultDisplay()。getHeight(); scaleXFromVirtualToReal =(float)width / this.gameScreenWidth; scaleYFromVirtualToreal =(float)height / this.gameScreenHeight;

  3. 前に定義したビットマップに基づいてキャンバスオブジェクトを定義します(たとえば、canvas.drawRect()[...]):

    Canvas canvasGameScreen = new Canvas(gameScreen);

  4. レンダリングスレッドには、仮想フレームバッファをレンダリングするframeBufferというキャンバスが必要です。

    frameBuffer.drawBitmap(this.gameScreen、null、new Rect(0、0、width、height)、null);

于 2012-07-31T12:11:58.090 に答える
1

いいえ、画面上の単位 (または を使用しているかどうかcanvas)OpenGLはピクセルです。相対座標が必要な場合はCanvas.getWidth()とを使用してキャンバスのサイズを取得できますが、キャンバスの描画方法もピクセル単位であるため、.Canvas.getHeight()OpenGLCanvas

于 2012-07-31T12:26:18.643 に答える