0

これは AntiAlias に関するものではありません。回答する前に質問をお読みください。

報奨金を追加する--> androidは、テキストの幅(ピクセル単位)を画面の幅/高さのパーセントに変換します

品質情報 --> https://stackoverflow.com/a/1016941/1815624

キャンバスにテキストを描画しようとすると、一貫性のない結果が得られます。助けてください、ありがとう。

テキストがすべてのデバイスで同じ量のスケーリングされたスペースを消費するようにしたい

私はANTI_ALIASを気にせず、追加しましたpaint.setFlags(Paint.ANTI_ALIAS_FLAG);が、問題は同じです...

ある画面では、テキストは幅の半分を消費し、別の画面では 1/3 しか消費せず、全幅を使用する画面さえあります。

私は、それらすべてが同じ量の画面領域を使用することを望んでいます。

例えば

1600X900 7 インチ タブレット キットカット 物理: 一貫性のない結果

1920.1080 5.2 キットカット物理 一貫性のない結果

1600x900 20 インチ Lollipop エミュレート 一貫性のない結果

1280×720 4.7インチ 一貫性のない結果

これらは、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

https://stackoverflow.com/a/14753968/1815624

https://stackoverflow.com/a/21895626/1815624 <-今試しています

4

1 に答える 1