有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用Paint object在安卓中创建字体和文本样式

我正在使用安卓 Paint类创建文本。我知道如何设置文本大小和颜色。我想使用Arial作为字体大小和粗体。如何使用paint对象执行此操作。我在Paint类中查看了一些方法,但找不到任何关于如何操作的内容

这就是我创建文本样式的方式

// Defining a paint object
paint = new Paint();
paint.setTextSize(30);
paint.setTextAlign(Paint.Align.LEFT);
paint.setAntiAlias(true);
paint.setColor(Color.WHITE);

下面是我如何在视图上绘制文本

g.drawString("My Text", 430, 774, paint);

如何使用Paint类创建Arial字体和粗体文本


共 (3) 个答案

  1. # 1 楼答案

    使用文本绘制类而不是绘制类。并且可以如下实现

    TextPaint textPaint = new TextPaint();
    textPaint.setTextSize(30);
    textPaint.setTextAlign(Paint.Align.LEFT);
    textPaint.setColor(Color.WHITE);
    textPaint.setTypeface(Typeface.create("Arial", Typeface.BOLD));
    
  2. # 2 楼答案

    private Bitmap getFontBitmap(String text, int color, float fontSizeSP, int typefaceStyle, boolean isCustomFont) {
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        if (isCustomFont) {
            Typeface typeface = Typeface.create(Typeface.createFromAsset(mContext.getAssets(), "fonts/bangla/bensen_handwriting.ttf"), typefaceStyle);
            paint.setTypeface(typeface);
        } else {
            Typeface typeface = Typeface.create(Typeface.DEFAULT, typefaceStyle);
            paint.setTypeface(typeface);
        }
        int fontSizePX = ConvertDptoPx(mContext, fontSizeSP);
        int pad = (fontSizePX / 9);
        paint.setColor(color);
        paint.setTextSize(fontSizePX);
    
        int textWidth = (int) (paint.measureText(text) + pad * 2);
        int height = (int) (fontSizePX / 0.75);
        Bitmap bitmap = Bitmap.createBitmap(textWidth, height, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        float xOriginal = pad;
        canvas.drawText(text, xOriginal, fontSizePX, paint);
        return bitmap;
    }
    
    private int ConvertDptoPx(Context context, float dip) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, context.getResources().getDisplayMetrics());
    }
    

    然后打电话

    Bitmap bitmap = getFontBitmap("Ahamadullah", color, 22, Typeface.BOLD, true);
    

    Bitmap bitmap = getFontBitmap("Ahamadullah", color, 22, Typeface.NORMAL | Typeface.ITALIC, false);
    
  3. # 3 楼答案

    2020年1月

    将要使用的字体复制到res/font (例如opensans_regular.ttf、opensans_italic.ttf、opensans_bolditalic.ttf等) 注意名字中没有大写字母“-”

    创建新的字体资源文件OpenSAN。xml

    <?xml version="1.0" encoding="utf-8"?>
    <font-family
         xmlns:app="http://schemas.android.com/apk/res-auto">
    
        <font
            app:fontStyle="normal"
            app:fontWeight="400"
            app:font="@font/opensans_regular" />
    
        <font
            app:fontStyle="italic"
            app:fontWeight="400"
            app:font="@font/opensans_italic" />
    
        <font
            app:fontStyle="normal"
            app:fontWeight="700"
            app:font="@font/opensans_bold" />
    
        <font
            app:fontStyle="italic"
            app:fontWeight="700"
            app:font="@font/opensans_bolditalic" />
    
        <font
            app:fontStyle="normal"
            app:fontWeight="200"
            app:font="@font/opensans_light" />
    
        <font
            app:fontStyle="italic"
            app:fontWeight="200"
            app:font="@font/opensans_lightitalic" />
    
        <font
            app:fontStyle="normal"
            app:fontWeight="800"
            app:font="@font/opensans_extrabold" />
    
        <font
            app:fontStyle="italic"
            app:fontWeight="800"
            app:font="@font/opensans_extrabolditalic" />
    
    </font-family>
    

    在你的主要活动中。java可以使用以下代码

        Paint paint = new Paint();
        Typeface typeface;
    
        if (Build.VERSION.SDK_INT >= 28) {
            // This does only works from SDK 28 and higher
            Typeface typefaceA = ResourcesCompat.getFont(this, R.font.opensans);
            typeface = Typeface.create(typefaceA, 700, false);
        } else {
            // This always works (Whole name without .ttf)
            typeface = ResourcesCompat.getFont(this, R.font.opensans_bolditalic);
        }
        paint.setTypeface(typeface);