Нарисуйте один и тот же круг на одном изображении на двух разных устройствах (разная плотность экрана) - PullRequest
0 голосов
/ 29 декабря 2011

У меня изображение на двух разных устройствах с разным размером экрана и плотностью.

Используя холст, я хочу нарисовать окружность на изображении устройства A, затем отправить координаты центра на устройство B и нарисовать окружность в том же положении, даже если одно и то же изображение имеет другой размер.

То, что я делаю на устройстве A перед отправкой координаты x, выглядит следующим образом:

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), то же самое изображение полностью отображается, но занимает меньше места!

Должен ли этот подход работать при работе на реальных устройствах?

Есть ли лучший способ сделать это?

1 Ответ

2 голосов
/ 10 апреля 2012

найти ширину и высоту холста и, разделив ширину и высоту, найти соотношение. Это соотношение следует умножить на каждое значение

Вот пример кода

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);

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...