2011-12-29 5 views
0

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

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

Что делать на устройстве перед отправкой х координат следующее:

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

я сделать то же самое для координаты у.

На устройстве В, я получаю те же параметры и умножить полученные координаты для inchesLenght:

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

Я проверяю это на AVDS. Проблема заключается в том, что каждый AVD имеет плотность экрана 1, даже если я четко вижу, что на меньшем устройстве (устройство A) одно и то же изображение полностью отображается, но занимает меньшее пространство!

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

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

ответ

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

    } 
} 
Смежные вопросы