Android 實現弧形字體漸變文字

好久沒寫了 ,來把遇到的需求記錄一下

首先放個效果,看是不是你們想要的 ,免得浪費大家的寶貴時間



如果是差不多的 就可以繼續向下看了

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PaintFlagsDrawFilter;
import android.graphics.Path;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author Jesse
 * write this view for draw line,use it easy.
 */
public class FuckView extends View {

    private String text="ewfewfref";
    private List<Map<String, Integer>> mListPoint = new ArrayList<Map<String,Integer>>();

    Paint mPaint = new Paint();

    public FuckView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub

    }

    public FuckView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    public FuckView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        //換圖區域,寬高自己設定,要圓要扁請隨意
        RectF rectF = new RectF(0, 0, 1000, 500);
        //這個功能的重要點 其實是先畫一個軌跡 然後再把文字畫到這個軌跡上 所以 想要什麼樣的扭曲,就畫什麼樣的軌跡,下面就是畫一個軌跡
        Path path=new Path();
        //畫一個弧形 也可以是橢圓  上面的矩形就是這個圖形的區域大小了 後面兩個參數記住 一個是起始位置 一個是所畫角度而不是終點位置
        path.addArc(rectF,-160,180);
        mPaint.setColor(Color.RED);
        //去鋸齒的 不多說
        mPaint.setAntiAlias(true);
        mPaint.setTextSize(20);

        // 畫布下移
        canvas.translate(0, 160);
        // 繪製路徑
        mPaint.setStyle(Paint.Style.STROKE);
        canvas.drawPath(path, mPaint);

        // 下面就是繪製文本了
        mPaint.setStyle(Paint.Style.FILL);
        //把傳進來的string轉成char【】類型 下面要用到
       char[] chars= text.toCharArray();
        for(int i=0;i<chars.length;i++){
            //這裏就是讓文字由小到大了,裏面的參數嘛 自己看着整 發揮創造性了
            mPaint.setTextSize(60+3*i);
            char[] chars1=new char[1];
            chars1[0]=chars[i];
            //下面就是一個字符一個字符的往後畫了 根據自己的需求調整寬度 尺寸
            //這裏說明一下參數,免得大家自己又要去看去猜去摸索 如果單純的不需要文字逐漸變大或者啥的 只需要扭曲
            //那就直接用canvas.drawTextOnPath();把string path 往裏面傳就好了
            //然後下面的0 的位置是X的偏移 1是寫Y軸的偏移 這個就可以讓那個path是在文字下面 或者穿過中間 或者在下面了
            //差不多了 我很懶 只給個思路 畢竟大家拿過去都要自己改改的
                canvas.drawTextOnPath(chars1,0,1, path, i*(15+i), 20+i, mPaint);

        }


    }

    public void setFuckText(String text)
    {
        this.text=text;
        invalidate();
    }
}

先代碼貼出來 接下來嘛 就容易了 


在佈局寫一下

<com.example.yanwei.myapplication.FuckView
    android:id="@+id/fuck_view"
    android:layout_width="500dp"
    android:layout_height="500dp" />

在代碼裏調用一下 

FuckView fuck= (FuckView) findViewById(R.id.fuck_view);
fuck.setFuckText("ssssssssssssssssssssssss");


然後最後思路來源是下面這個網址 我貼出來

http://www.xuebuyuan.com/2071680.html


裏面的代碼實現之後是這樣



好了 我已經懶出新高度了 

希望有用,然後多創造一下 發揮下自己的創造力

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章