好久沒寫了 ,來把遇到的需求記錄一下
首先放個效果,看是不是你們想要的 ,免得浪費大家的寶貴時間
如果是差不多的 就可以繼續向下看了
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
裏面的代碼實現之後是這樣
好了 我已經懶出新高度了
希望有用,然後多創造一下 發揮下自己的創造力