在Android中弯曲文本

时间:2018-01-10 19:39:46

标签: java android textview curve

我正在创建一个文本编辑应用程序,允许用户使用不同的字体,颜色,大小等编辑文本。现在我正在处理一个应该弯曲文本的功能。我已经尝试过询问一次HERE但是发布的答案并不是我真正想要的(也许是这样,我只是不明白他们的意思)所以我想我再问一次实际参考我想要完成的事情。 IMAGE正如你所看到的,我正在尝试根据滑块的值(我的情况下是搜索条)得到文本曲线,但我只是不知道该怎么做。我试图模仿HERE特别是Along a path部分所做的事情,但我再次确定如何使其与图片中显示的seekbar一起使用。

谢谢

修改

这是我一直在使用的代码。就像我之前说的那样,这正是我正在寻找的东西,我只是愚蠢,但无论如何它都在这里。

import android.app.Activity;
import android.graphics.*;
import android.os.Bundle;
import android.view.*;


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 Painting extends Activity
{
    public static int y = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(new SampleView(this));
    }

    private static class SampleView extends View
    {
        private Paint mPaint;
        private float mX;
        private float[] mPos;

        private Path mPath;
        private Paint mPathPaint;

        private static final int DY = 30;
        private static final String TEXTONPATH = "Along a path";

        private static void makePath(Path p)
        {
            p.moveTo(10, 0);
            p.cubicTo(00, 00, 00, 00, 900, 00);
        }

        public SampleView(Context context)
        {
            super(context);
            setFocusable(true);

            mPaint = new Paint();
            mPaint.setAntiAlias(true);
            mPaint.setTextSize(90);
            mPaint.setTypeface(Typeface.SERIF);

            mPath = new Path();
            makePath(mPath);

            mPathPaint = new Paint();
            mPathPaint.setAntiAlias(true);
            mPathPaint.setColor(0x800000FF);
            mPathPaint.setStyle(Paint.Style.STROKE);
        }

        @Override
        protected void onDraw(Canvas canvas)
        {
            canvas.drawColor(Color.WHITE);

            Paint p = mPaint;
            float x = mX;
            float y = 0;
            float[] pos = mPos;

            p.setColor(0x80FF000);
            canvas.drawLine(x, y, x, y+DY*3, p);
            p.setColor(Color.BLACK);

            canvas.translate(0, DY*10);

            canvas.drawPath(mPath, mPathPaint);
            p.setTextAlign(Paint.Align.LEFT);
            canvas.drawTextOnPath(TEXTONPATH, mPath, 0, 0, p);
    }
}

}

1 个答案:

答案 0 :(得分:0)

您无法使用TextView执行此操作。相反,你必须写自己的类View

您必须覆盖onDraw并将文字绘制到那里的Canvas

要使其与SeekBar一起使用,您可以使用SeekBar#setOnSeekBarChangeListener。在onProgressChanged中,您可以告诉您的视图更改其外观。