| /* |
| * Copyright (C) 2007 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.example.android.apis.graphics; |
| |
| import android.content.Context; |
| import android.graphics.*; |
| import android.os.Bundle; |
| import android.view.*; |
| |
| public class TextAlign extends GraphicsActivity { |
| |
| @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 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 static 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()]; |
| // initially get the widths for each char |
| int n = paint.getTextWidths(text, widths); |
| // now popuplate the array, interleaving spaces for the Y values |
| float[] pos = new float[n * 2]; |
| float accumulatedX = 0; |
| for (int i = 0; i < n; i++) { |
| pos[i*2 + 0] = accumulatedX; |
| pos[i*2 + 1] = y; |
| accumulatedX += widths[i]; |
| } |
| return pos; |
| } |
| |
| public SampleView(Context context) { |
| super(context); |
| setFocusable(true); |
| |
| mPaint = new Paint(); |
| mPaint.setAntiAlias(true); |
| mPaint.setTextSize(30); |
| mPaint.setTypeface(Typeface.SERIF); |
| |
| mPos = buildTextPositions(POSTEXT, 0, mPaint); |
| |
| 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; |
| |
| // draw the normal strings |
| |
| p.setColor(0x80FF0000); |
| canvas.drawLine(x, y, x, y+DY*3, p); |
| p.setColor(Color.BLACK); |
| |
| canvas.translate(0, DY); |
| p.setTextAlign(Paint.Align.LEFT); |
| canvas.drawText(TEXT_L, x, y, p); |
| |
| canvas.translate(0, DY); |
| p.setTextAlign(Paint.Align.CENTER); |
| canvas.drawText(TEXT_C, x, y, p); |
| |
| canvas.translate(0, DY); |
| p.setTextAlign(Paint.Align.RIGHT); |
| canvas.drawText(TEXT_R, x, y, p); |
| |
| canvas.translate(100, DY*2); |
| |
| // now draw the positioned strings |
| |
| p.setColor(0xBB00FF00); |
| for (int i = 0; i < pos.length/2; i++) { |
| canvas.drawLine(pos[i*2+0], pos[i*2+1]-DY, |
| pos[i*2+0], pos[i*2+1]+DY*2, p); |
| } |
| p.setColor(Color.BLACK); |
| |
| p.setTextAlign(Paint.Align.LEFT); |
| canvas.drawPosText(POSTEXT, pos, p); |
| |
| canvas.translate(0, DY); |
| p.setTextAlign(Paint.Align.CENTER); |
| canvas.drawPosText(POSTEXT, pos, p); |
| |
| canvas.translate(0, DY); |
| p.setTextAlign(Paint.Align.RIGHT); |
| canvas.drawPosText(POSTEXT, pos, p); |
| |
| // now draw the text on path |
| |
| canvas.translate(-100, DY*2); |
| |
| canvas.drawPath(mPath, mPathPaint); |
| p.setTextAlign(Paint.Align.LEFT); |
| canvas.drawTextOnPath(TEXTONPATH, mPath, 0, 0, p); |
| |
| canvas.translate(0, DY*1.5f); |
| canvas.drawPath(mPath, mPathPaint); |
| p.setTextAlign(Paint.Align.CENTER); |
| canvas.drawTextOnPath(TEXTONPATH, mPath, 0, 0, p); |
| |
| canvas.translate(0, DY*1.5f); |
| canvas.drawPath(mPath, mPathPaint); |
| p.setTextAlign(Paint.Align.RIGHT); |
| canvas.drawTextOnPath(TEXTONPATH, mPath, 0, 0, p); |
| } |
| |
| @Override |
| protected void onSizeChanged(int w, int h, int ow, int oh) { |
| super.onSizeChanged(w, h, ow, oh); |
| mX = w * 0.5f; // remember the center of the screen |
| } |
| } |
| } |
| |