Android之 drawTextOnpath

本文详细探讨了Android Canvas的drawTextOnPath()方法,解释了如何在路径上绘制文本,以及在实际应用中如何实现动态效果。通过实例代码展示了该方法的用法,帮助开发者更好地理解和运用这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android的 Canvas还提供了一个drawTextOnpath ( )方法

package com.test.pathactivity;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class PathTextActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // setContentView(R.layout.activity_path_text);
        setContentView(new MyTextView(this));
    }

    class MyTextView extends View{

        public static final String DRAW_TEXT = "疯狂Android讲义";
        Path[] mPath = new Path[3];
        Paint mPaint;

        public MyTextView(Context context) {
            super(context);

            mPath[0] = new Path();
            mPath[0].moveTo(0,0);

            for (int i = 0; i < 7; i++) {
                //生成 7个点 随机生成他们的 Y坐标,   并将他们连接成一条 path
                mPath[0].lineTo(i*30, (float) (Math.random()*30));
            }

            mPath[1] = new Path();
            RectF rectF = new RectF(0,0,200,150);
            mPath[1].addOval(rectF,Path.Direction.CCW);

            mPath[2] = new Path();
            mPath[2].addArc(rectF,60,180);

            //初始化画笔
            mPaint = new Paint();
            mPaint.setAntiAlias(true);
            mPaint.setColor(Color.BLUE);
            mPaint.setStrokeWidth(5);
        }

        @Override
        protected void onDraw(Canvas canvas) {
            canvas.drawColor(Color.WHITE);
            canvas.translate(150,50);

            //设置从右边开始绘制 (右对齐)
            mPaint.setTextAlign(Paint.Align.RIGHT);
            mPaint.setTextSize(22);

            //绘制路径
            mPaint.setStyle(Paint.Style.STROKE);
            canvas.drawPath(mPath[0],mPaint);

            //沿着路径绘制一段文本
            mPaint.setStyle(Paint.Style.FILL);
            canvas.drawTextOnPath(DRAW_TEXT, mPath[0], -8,20,mPaint);

            //对 canvas 进行坐标转换: 画布下移
            canvas.translate(0,60);

            //绘制路径
            mPaint.setStyle(Paint.Style.STROKE);
            canvas.drawPath(mPath[1],mPaint);

            //沿着路径绘制一段文本
            mPaint.setStyle(Paint.Style.FILL);
            canvas.drawTextOnPath(DRAW_TEXT, mPath[1], 20,20,mPaint);

            //对 canvas 进行坐标转换: 画布下移120
            canvas.translate(0,120);

            //绘制路径
            mPaint.setStyle(Paint.Style.STROKE);
            canvas.drawPath(mPath[2],mPaint);

            //沿着路径绘制一段文本
            mPaint.setStyle(Paint.Style.FILL);
            canvas.drawTextOnPath(DRAW_TEXT, mPath[2], 10,20,mPaint);

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值