【发布时间】:2016-05-09 02:55:26
【问题描述】:
这与 AntiAlias 无关,请在回答之前阅读问题,谢谢。
将赏金添加到--> android convert text width (in pixels) to percent of screen width/height
质量信息 --> https://stackoverflow.com/a/1016941/1815624
尝试在画布上绘制文本时,我得到的结果不一致。请帮忙,谢谢。
我希望文本在所有设备上占用相同数量的缩放空间
我不关心 ANTI_ALIAS 并添加了 paint.setFlags(Paint.ANTI_ALIAS_FLAG); 但问题是一样的......
在一个屏幕上,文本占用一半宽度,在另一个屏幕上仅占 1/3,甚至一个使用全宽。
我希望他们都使用相同数量的屏幕空间。
举例
这些是使用http://www.gkproggy.com/2013/01/draw-text-on-canvas-with-font-size.html的指南创建的
这里要彻底的是出处:
public class MainActivity extends Activity
{
Paint paint;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
paint = new Paint();
View test = new TestView(this);
setContentView(test);
}
public class TestView extends View
{
public TestView(Context context)
{
super(context);
setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
}
public float pixelsToSp(Context context, float px) {
float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
return px/scaledDensity;
}
public float spToPixels(float sp) {
Context context = getContext();
float scaledDensity = context.getResources().getDisplayMetrics().scaledDensity;
return scaledDensity*sp;
}
@Override
protected void onDraw(Canvas canvas)
{
int size = getResources().getDimensionPixelSize(R.dimen.sp20);
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, getResources().getDisplayMetrics());
Log.v("intSize", Integer.toString(size));
Log.v("intSize", Integer.toString(px));
Log.v("intSize", Float.toString(spToPixels(20f)));
if(true) {
Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/Ultra.ttf");
paint.setTypeface(myTypeface);
}
paint.setColor(Color.BLACK);
paint.setTextSize(size);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
canvas.drawText("HELLOOOOOOOOOOOOOO!", 0, size, paint);
super.onDraw(canvas);
}
}
}
我尝试过来自 https://stackoverflow.com/a/5369766/1815624
调查一下
https://stackoverflow.com/a/21895626/1815624
【问题讨论】:
-
我真的不知道你在问什么,但要获得“平滑”边缘,你可以在绘制对象上将抗锯齿设置为 true
-
我希望文本在所有设备上占用相同数量的缩放空间
-
看起来确实如此。如果您用尺子测量它们,您是否希望它们跨越屏幕宽度/高度的相同 百分比,或者它们的尺寸相同?
-
是的,这就是我想要做的。百分比
-
文本似乎与您提供的每个屏幕截图上的状态栏大小相同......它可以正确缩放。
标签: android android-canvas drawtext android-typeface pixel-perfect