Android-相对于像素密度在画布上绘制

Android-相对于像素密度在画布上绘制,android,canvas,Android,Canvas,所以我试着画一个文本和一个笔画的圆圈,但在不同大小的设备上,它们的像素密度不同 我已经将文本大小和笔划宽度(Paint.setStrokeWidth())乘以getResources().getDisplayMetrics().density)。我也尝试过反转它(1/getResources().getDisplayMetrics().density),然后将文本大小和笔划宽度乘以反转的密度。如何使它们在所有设备上看起来物理上相同?我建议您使用dimens和dp来表示笔划宽度,使用sp来表示文本

所以我试着画一个文本和一个笔画的圆圈,但在不同大小的设备上,它们的像素密度不同


我已经将文本大小和笔划宽度(
Paint.setStrokeWidth()
)乘以
getResources().getDisplayMetrics().density
)。我也尝试过反转它(
1/getResources().getDisplayMetrics().density
),然后将文本大小和笔划宽度乘以反转的密度。如何使它们在所有设备上看起来物理上相同?

我建议您使用
dimens
dp
来表示笔划宽度,使用
sp
来表示文本大小,剩下的就让安卓SDK来做

dimens.xml中(示例值):


使用
COMPLEX\u unit\u SP
尝试
TypedValue#applyDimension(int单位、浮点值、DisplayMetrics)
并使用返回值将文本大小设置为文本大小?笔划宽度如何?对于这个问题,任何其他尺寸?笔划宽度对于
绘制.样式.填充
(默认值)都不重要。我说我正在尝试制作一个笔划圆。好的,所以使用
applyDimension
两次,使用
COMPLEX\u UNIT\u SP
COMPLEX\u UNIT\u DIP
<resources>
    <dimen name="your_stroke_width">10dp</dimen>
    <dimen name="your_text_size">16sp</dimen>
</resources>
mPaint.setStrokeWidth(getContext().getResources().getDimensionPixelSize(R.dimen.your_stroke_width));

mTextPaint.setTextSize(getResources().getDimension(R.dimen.your_text_size));