簡體   English   中英

Android在屏幕密度上創建位圖大小

[英]Android Creating Bitmap Size on Screen Density

在我的應用中,我需要像這樣將位圖圖標疊加在Google Map View上。

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

但是,這些圖標在不同的屏幕密度上具有明顯不同的大小(這是可以預期的)。

如何在所有屏幕密度上以相同大小創建它們?

最好的方法是在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)

您可以從“活動”,“片段”或“視圖”中獲取上下文或資源,因此您可能可以獲取其中之一。 不要使用應用程序上下文,因為這會在邊緣條件下給您帶來一些問題。

更新:

發表評論后,您似乎需要以編程方式計算該值。 只需將半徑乘以DisplayMetrics.density

方法如下:

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

這是文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM