我想使用Canvas
在一个视图上绘制指定高度(以像素为单位)的文本。您是否可以使用Paint.setTextSize(float)
来设置像素数量,或者它是使用dp
或sp
的?
我想使用Canvas
在一个视图上绘制指定高度(以像素为单位)的文本。您是否可以使用Paint.setTextSize(float)
来设置像素数量,或者它是使用dp
或sp
的?
它使用像素,但是您可以使用此代码将其转换为dp:
double getDPFromPixels(double pixels) {
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
switch(metrics.densityDpi){
case DisplayMetrics.DENSITY_LOW:
pixels = pixels * 0.75;
break;
case DisplayMetrics.DENSITY_MEDIUM:
//pixels = pixels * 1;
break;
case DisplayMetrics.DENSITY_HIGH:
pixels = pixels * 1.5;
break;
}
return pixels;
}
对于此类方法获取px值的最简单方法是,在dimens.xml文件中定义适当的dp或sp值,并像这样检索它:
int sizeInPx = context.getResources().getDimensionPixelSize(R.dimen.sizeInSp);
根据您的需求,有三种可用的方法:
getDimension()
返回一个以像素为单位的浮点数。
getDimensionPixelSize()
返回一个以像素为单位的整数。与getDimension()
相同,但返回的值四舍五入到最近的整数值,并确保非零输入值产生非零输出值(例如0.1将作为1而不是0返回)。
getDimensionPixelOffset()
返回一个以像素为单位的整数。与getDimension()
相同,但返回的值截断(即向下取整)。结果可能为零。
PhotoView
(Chris Bane's)中使用相同的位图,以便能够缩放...该图像。我之前意外地使用了较小的画布,但它没有在正确的位置绘制东西。感谢您提供“正确方法”的提示,我会在有时间时尝试它,但现在我将保留它,因为最终它可以在不同的设备上工作,这正是我想要的。;) - NephDisplayMetrics
。
像素转换为dip:
public static float getDipFromPixels(float px) {
return TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_PX,
px,
Resources.getSystem().getDisplayMetrics()
);
}
将Dip转换为像素:
public static float getPixelsFromDip(float dip) {
return TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
dip,
Resources.getSystem().getDisplayMetrics()
);
}
getContext()
来获取Context
,然后您可以调用Context.getSystemService(Context.WINDOW_SERVICE)
来获取WindowManager
。更多信息请参见此处:http://developer.android.com/reference/android/view/WindowManager.html。 - Tzoikerpixels /= metrics.density
替换整个switch
。 - Tzoiker