Android 中 drawTextOnPath 文字效果演示(中級)
Android中Canvas提供了一個drawTextOnPath (String text,Path ath,float hOffset,float vOffset,Pating paint)方法,該方法可以沿着Path繪製文本 其中hOffset參數指定水平偏移 vOffset參數指定垂直偏移
上代碼
private static class mytext extends View{
private Paint paint;
private static final String SKY="skyoceanone";
private Path paths[]=new Path[3];
public mytext(Context context) {
super(context);
paint=new Paint();
paint.setColor(Color.RED);
paint.setAntiAlias(true);
paint.setTextAlign(Paint.Align.RIGHT);//設置從右變開始寫字
paint.setTextSize(20);
paths[0]=new Path();
paths[0].moveTo(0,0);
for(int i=0;i<15;i++){//一條線的路徑
paths[0].lineTo(i*30, (float)Math.random()*60);
}
paths[1]=new Path();
RectF oval=new RectF(0, 0, 300, 200);
paths[1].addOval(oval, Path.Direction.CCW);//一個橢圓的路徑
paths[2]=new Path();
paths[2].addArc(oval, 60, 180);//一個弧線的路徑
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
canvas.drawColor(Color.WHITE);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(1);
canvas.translate(0, 20);
//以線路徑爲列子 如果 hOffset vOffset兩個參數 爲0 效果如圖一 會沿着線上走
// 參數爲 0,20 則會向下20個像素點 如圖二
canvas.drawPath(paths[0], paint);
canvas.drawTextOnPath(SKY, paths[0], 0, 20, paint);
canvas.translate(0, 120);
canvas.drawPath(paths[2], paint);
canvas.drawTextOnPath(SKY, paths[2], -30, 30, paint);
canvas.translate(0, 240);
paint.setStyle(Paint.Style.FILL);
canvas.drawPath(paths[1], paint);
canvas.drawTextOnPath(SKY, paths[1], -30, 30, paint);
}
}