public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new SampleView(this));
}
private class SampleView extends View{
private Paint mPaint;
private Path mPaht;
private Paint mPathPaint;
private float[] mPos;
private float mX;
private static final String TEXT_L = "Left";
private static final String TEXT_C = "Center";
private static final String TEXT_R = "Right";
private static final String POSTEXT = "Positioned";
private static final String TEXTONPATH = "Along a path";
private void makePath(Path p){
p.moveTo(10, 0);
p.cubicTo(100, -50, 200, 50, 300, 0);
}
private float[] buildTextPositions(String text,float y,Paint paint){
float[] widths=new float[text.length()];
int n=paint.getTextWidths(text, widths);
float[] pos=new float[n*2];
float accumulatedX=0;
for(int i=0;i<n;i++){
pos[i*2]=accumulatedX;
pos[i*2+1]=y;
accumulatedX+=widths[i];
}
return pos;
}
public SampleView(Context context) {
super(context);
setFocusable(true);
mPaint=new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setTextSize(30);
mPaint.setTypeface(Typeface.SERIF);
mPos=buildTextPositions(POSTEXT, 0, mPaint);
mPaht=new Path();
makePath(mPaht);
mPathPaint=new Paint(Paint.ANTI_ALIAS_FLAG);
mPathPaint.setColor(0x800000ff);
mPathPaint.setStyle(Paint.Style.STROKE);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
int DY=30;
float x=mX;
float y=0;
mPaint.setColor(0x80ff0000);
canvas.drawLine(x, y, x, y+DY*3, mPaint);
mPaint.setColor(Color.BLACK);
canvas.translate(0, DY);
mPaint.setTextAlign(Paint.Align.LEFT);
canvas.drawText(TEXT_L, x, y, mPaint);
canvas.translate(0, DY);
mPaint.setTextAlign(Paint.Align.CENTER);
canvas.drawText(TEXT_C, x, y, mPaint);
canvas.translate(0, DY);
mPaint.setTextAlign(Paint.Align.RIGHT);
canvas.drawText(TEXT_R, x, y, mPaint);
canvas.translate(100, DY*2);
mPaint.setColor(0x8000ff00);
for(int i=0;i<mPos.length/2;i++){
canvas.drawLine(mPos[i*2], mPos[i*2+1]-DY, mPos[i*2], mPos[i*2+1]+DY*2, mPaint);
}
mPaint.setColor(Color.BLACK);
mPaint.setTextAlign(Paint.Align.LEFT);
canvas.drawPosText(POSTEXT, mPos, mPaint);
canvas.translate(0, DY);
mPaint.setTextAlign(Paint.Align.CENTER);
canvas.drawPosText(POSTEXT, mPos, mPaint);
canvas.translate(0, DY);
mPaint.setTextAlign(Paint.Align.RIGHT);
canvas.drawPosText(POSTEXT, mPos, mPaint);
canvas.translate(-100, DY*2);
canvas.drawPath(mPaht, mPathPaint);
mPaint.setTextAlign(Paint.Align.LEFT);
canvas.drawTextOnPath(TEXTONPATH, mPaht, 0, 0, mPaint);
canvas.translate(0, DY*1.5f);
canvas.drawPath(mPaht, mPathPaint);
mPaint.setTextAlign(Paint.Align.CENTER);
canvas.drawTextOnPath(TEXTONPATH, mPaht, 0, 0, mPaint);
canvas.translate(0, DY*1.5f);
canvas.drawPath(mPaht, mPathPaint);
mPaint.setTextAlign(Paint.Align.RIGHT);
canvas.drawTextOnPath(TEXTONPATH, mPaht, 0, 0, mPaint);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
mX=w*0.5f;
}
}
}