2016-07-07 3 views
0

В моем приложении мне нужно сделать растровые значки, которые накладываются на карту Google Map так же.Android Создание размера растрового изображения на экране Плотность

public Bitmap makeBubble(int radius, int color) { 
    Bitmap bm = Bitmap.createBitmap(radius * 2, radius * 2, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bm); 

    Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
    paint.setColor(color); 
    paint.setStyle(Paint.Style.FILL); 
    canvas.drawCircle(bm.getWidth()/2, bm.getHeight()/2, radius, paint); 

    paint.setColor(Color.argb(255, Color.red(color), Color.green(color), Color.blue(color))); 
    paint.setStyle(Paint.Style.STROKE); 
    canvas.drawCircle(bm.getWidth()/2, bm.getHeight()/2, radius, paint); 
    return bm; 
} 

Однако эти значки имеют значительно разные размеры при различных плотностях экрана (как и следовало ожидать).

Как создать их в одном размере на всех плотностях экрана?

ответ

1

Лучший способ сделать это состоит в определении размер в XML: (вы можете переименовать его)

<!-- file: /res/values/dimentions.xml (you can rename the file) --> 
<resources> 
    <dimen name="circle_radius">24dp</dimen> 
</resources> 

А потом, где вы вызовите эту функцию makeBubble сделать это:

int radius = context.getResources().getDimensionPixelSize(R.dimen.circle_radius); 
makeBubble(radius, color) 

Вы можете получить контекст или ресурсы из Activity, Fragment или View, чтобы вы, вероятно, могли получить один из них. Не используйте контекст приложения, так как это даст вам некоторые проблемы в краевых условиях.

Update:

После Вашего комментария, вы, кажется, нужно вычислить значение программно. Просто умножьте радиус на DisplayMetrics.density

Вот как это сделать:

DisplayMetrics metrics = getResources().getDisplayMetrics(); 
int radius = ...; // original calculation 
radius *= metrics.density; // now this is adjusted for screen density 

Here's the documentation

+0

рассчитать радиус перед вызовом этой функции (радиус может быть любое значение, не определено заранее), так что я могу Использовать заданное значение в ресурсах. – mbacvanski

+0

как вы вычисляете радиус? на основе чего? –

+0

Радиус рассчитывается на основе другого фактора, но мой реальный вопрос заключается в том, чтобы удостовериться, что при одинаковом радиусе на двух устройствах нарисованный растровый рисунок будет иметь тот же физический размер, независимо от плотности экрана. – mbacvanski

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