java - Android 中的弯曲文本

标签 java android textview curve

我正在创建一个文本编辑应用程序,它允许用户使用不同的字体、颜色、大小等来编辑文本。现在我正在研究一个应该使文本弯曲的功能。我已经试过问一次了 HERE但是发布的答案并不是我真正想要的(或者可能是我只是不明白他们的意思)所以我想我会再次询问我正在尝试的实际引用去完成。 IMAGE正如您所看到的,我正在尝试根据 slider (在我的例子中是 seekbar)的值来设置文本曲线,但我只是不知道该怎么做。我试图模仿所做的事情 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);
    }
}

最佳答案

您将无法使用 TextView 执行此操作。相反,您将不得不编写自己的类来扩展 View

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

要使其与 SeekBar 配合使用,您可以使用 SeekBar#setOnSeekBarChangeListener。在 onProgressChanged 中,您可以告诉您的 View 更改其外观。

关于java - Android 中的弯曲文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48194889/

相关文章:

Android:防止谷歌地图在 EditText 输入后调整/移动

android - 我的android应用每次都在ADT API中崩溃:23

java - Android Studio 启动卡在 gradle 运行中

android - 单击按钮时旋转一定角度

java - 使用 Web 服务将对象作为 SOAP 请求的一部分传递并将对象作为响应返回...

java - Libgdx 管理 Assets

java - 在 Camel JUnit 中 Autowiring Spring Bean

java - 在良好的编程实践中我们应该更喜欢什么? @Produces ("application/json") 或@Produces(MediaType.APPICATION_JSON)?

android - textView 和 XML 声明中的多个变量

java - 打印 Unicode 字符 Android TextView