android - how to set custom typeface in paint object?

拜拜、爱过 提交于 2019-12-20 04:09:35

问题


I want to use a Paint to draw something and here is my code :

    Paint mMonthTitlePaint = new Paint();
    mMonthTitlePaint.setFakeBoldText(true);
    mMonthTitlePaint.setAntiAlias(true);
    mMonthTitlePaint.setTextSize(MONTH_LABEL_TEXT_SIZE);
    mMonthTitlePaint.setTypeface(Typeface.createFromAsset(getAssets(),"fonts/iran_sans_.ttf"));
   mMonthTitlePaint.setColor(mDayTextColor);
   mMonthTitlePaint.setTextAlign(Align.CENTER);
   mMonthTitlePaint.setStyle(Style.FILL);

but it is not working and typeface did not apply to paint object. where is my problem? how to fix it?

here is my onDraw :

@Override
protected void onDraw(Canvas canvas) {
    drawMonthNums(canvas);
}

and drawMonthNums :

protected void drawMonthNums(Canvas canvas) {
        int y = (((mRowHeight + MINI_DAY_NUMBER_TEXT_SIZE) / 2) - DAY_SEPARATOR_WIDTH)
                + getMonthHeaderSize();
        final float dayWidthHalf = (mWidth - mEdgePadding * 2) / (mNumDays * 2.0f);
        int j = findDayOffset();
        for (int dayNumber = 1; dayNumber <= mNumCells; dayNumber++) {
            final int x = (int)((2 * j + 1) * dayWidthHalf + mEdgePadding);

            int yRelativeToDay = (mRowHeight + MINI_DAY_NUMBER_TEXT_SIZE) / 2 - DAY_SEPARATOR_WIDTH;

            final int startX = (int)(x - dayWidthHalf);
            final int stopX = (int)(x + dayWidthHalf);
            final int startY = y - yRelativeToDay;
            final int stopY = startY + mRowHeight;

            drawMonthDay(canvas, mYear, mMonth, dayNumber, x, y, startX, stopX, startY, stopY);

            j++;
            if (j == mNumDays) {
                j = 0;
                y += mRowHeight;
            }
        }
    }

and at last this is my asset folder :


回答1:


try this:

    Typeface tf =Typeface.createFromAsset(getAssets(),"fonts/iran_sans_.ttf");
   Paint paint = new Paint();
   paint.setTypeface(tf);
   canvas.drawText("Sample text",0,0,paint);

you can also use the Textpaint class instead of Paint

   TextPaint textPaint = new TextPaint();
    textPaint.setTextSize(20);
    textPaint.setTextAlign(Paint.Align.LEFT);
    textPaint.setColor(Color.WHITE);
    Typeface tf =Typeface.createFromAsset(getAssets(),"fonts/iran_sans_.ttf");
    textPaint.setTypeface(tf);

see this: https://developer.android.com/reference/android/text/TextPaint.html



来源:https://stackoverflow.com/questions/41671834/android-how-to-set-custom-typeface-in-paint-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!