0

画面サイズと密度が異なる 2 つの異なるデバイスに画像があります。

キャンバスを使用して、デバイスAの画像に円を描き、中心座標をデバイスBに送信し、同じ画像のサイズが異なっていても、同じ位置に円を描きたいです。

x座標を送信する前にデバイスAで行うことは次のとおりです。

float density = getResources().getDisplayMetrics().density;
int width = getWidth();
float inchesLength = width/density;
float scaledXCenter = xCenter / inchesLength;

y 座標についても同じことを行います。

デバイス B で、同じパラメーターを取得し、受け取った座標をインチの長さで乗算します。

float density = getResources().getDisplayMetrics().density;
int width = getWidth();
float inchesLength = width/density;
float restoredXCenter = scaledXCenter * inchesLength;

これを AVD でテストしています。問題は、各 AVD の画面密度が 1 であることです。小さいデバイス (デバイス A) では同じ画像が完全に表示されていることがはっきりとわかりますが、占めるスペースは小さくなります!

このアプローチは、実際のデバイスで作業するときに機能する必要がありますか?

それを行うより良い方法はありますか?

4

1 に答える 1

2

キャンバスの幅と高さを見つけ、幅と高さを割って比率を見つけます。この比率は、各値で乗算する必要があります

サンプルコードはこちら

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class GameCanvas extends View {
    private Paint paint = new Paint();
    private float canvasWidth;
    private float canvasHeight;
    private float ratio;

    public GameCanvas(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public void onDraw(Canvas canvas) {
        canvasWidth = canvas.getWidth();
        canvasHeight = canvas.getHeight();
        ratio=canvasWidth/canvasHeight;

        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(3);
        //canvas.drawRect(30*ratio, 30*ratio, 100*ratio, 200*ratio, paint);
        paint.setStrokeWidth(0);
        paint.setColor(Color.CYAN);
        canvas.drawRect(33*ratio, 60*ratio, 77*ratio, 77*ratio, paint);
        paint.setColor(Color.YELLOW);
        canvas.drawRect(33*ratio, 33*ratio, 77*ratio, 60*ratio, paint);

    }
}
于 2012-04-10T06:36:44.547 に答える