【问题标题】:android - how to set custom typeface in paint object?android - 如何在绘画对象中设置自定义字体?
【发布时间】:2017-01-16 16:24:08
【问题描述】:

我想使用Paint 来绘制一些东西,这是我的代码:

    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);

但它不起作用并且字体不适用于绘画对象。我的问题在哪里?如何解决?

这是我的 onDraw :

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

和 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;
            }
        }
    }

最后这是我的资产文件夹:

【问题讨论】:

  • 你的字体放在哪里?
  • 在资产文件夹中
  • 我的意思是资产文件夹。请在 Android Studio 中显示文件夹的截图
  • 你能检查一下 createfromasserts 函数的返回值吗?
  • @Vyacheslav 我调试它并设置字体。我想向您展示它的价值,但我不知道如何

标签: android paint typeface


【解决方案1】:

试试这个:

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

您也可以使用Textpaint 类代替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);

看到这个:https://developer.android.com/reference/android/text/TextPaint.html

【讨论】:

  • 您可以使用paint对象绘制文本。
  • 这是一个大类,画布是很晚才设置的。我可以设置一个不重要的画布吗?只是为了应用字体
  • @faezesaghafi 您的画布在哪里绘制?你在 onDraw() 方法中应用了吗
  • @Piyush:是的 drawMonthNums(canvas);在这个方法中
猜你喜欢
  • 2013-12-15
  • 2011-09-30
  • 2017-01-20
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 2014-07-01
相关资源
最近更新 更多