TextOnPathActivity.java revision 03d58520c3eb6bb7efb7235bfd957550533d6725
1325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy/* 2325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy * Copyright (C) 2010 The Android Open Source Project 3325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy * 4325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy * you may not use this file except in compliance with the License. 6325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy * You may obtain a copy of the License at 7325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy * 8325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy * 10325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy * Unless required by applicable law or agreed to in writing, software 11325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy * See the License for the specific language governing permissions and 14325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy * limitations under the License. 15325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy */ 16325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 17325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guypackage com.android.test.hwui; 18325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 19325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guyimport android.app.Activity; 20325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guyimport android.content.Context; 21325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guyimport android.graphics.Canvas; 22325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guyimport android.graphics.Paint; 23325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guyimport android.graphics.Path; 24325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guyimport android.os.Bundle; 25325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guyimport android.view.View; 26325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 27325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy@SuppressWarnings({"UnusedDeclaration"}) 28325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guypublic class TextOnPathActivity extends Activity { 29325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy private Path mPath; 30325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 31325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy @Override 32325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy protected void onCreate(Bundle savedInstanceState) { 33325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy super.onCreate(savedInstanceState); 34325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 35325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy mPath = makePath(); 36325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 37325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy final TextOnPathView view = new TextOnPathView(this); 38325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy setContentView(view); 39325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 40325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 41325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy private Path makePath() { 42325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy Path path = new Path(); 43325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy buildPath(path); 44325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy return path; 45325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 46325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 47325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy private void buildPath(Path path) { 48325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy path.moveTo(0.0f, 0.0f); 49325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy path.cubicTo(0.0f, 0.0f, 100.0f, 150.0f, 100.0f, 200.0f); 50325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy path.cubicTo(100.0f, 200.0f, 50.0f, 300.0f, -80.0f, 200.0f); 51325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy path.cubicTo(-80.0f, 200.0f, 100.0f, 200.0f, 200.0f, 0.0f); 52325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 53325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 54325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy public class TextOnPathView extends View { 55325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy private static final String TEST_STRING = "Hello OpenGL renderer, text on path! "; 56325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 57325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy private final Paint mPaint; 58325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy private final String mText; 59325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 60325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy public TextOnPathView(Context c) { 61325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy super(c); 62325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 63325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy mPaint = new Paint(); 64325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy mPaint.setAntiAlias(true); 65325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy mPaint.setColor(0xff000000); 66325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 6703d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy StringBuilder builder = new StringBuilder(TEST_STRING.length() * 2); 6803d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy for (int i = 0; i < 2; i++) { 69325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy builder.append(TEST_STRING); 70325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 71325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy mText = builder.toString(); 72325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 73325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 74325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy @Override 75325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy protected void onDraw(Canvas canvas) { 76325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy super.onDraw(canvas); 77325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 78325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy canvas.drawARGB(255, 255, 255, 255); 79325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy 8003d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy canvas.save(); 8103d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy canvas.translate(400.0f, 350.0f); 8203d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy mPaint.setTextAlign(Paint.Align.LEFT); 8303d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy canvas.drawTextOnPath(mText + mText, mPath, 0.0f, 0.0f, mPaint); 8403d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy canvas.restore(); 8503d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy 8603d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy canvas.save(); 8703d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy canvas.translate(150.0f, 60.0f); 8803d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy canvas.drawTextOnPath(mText, mPath, 0.0f, 0.0f, mPaint); 8903d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy 9003d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy canvas.translate(250.0f, 0.0f); 9103d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy mPaint.setTextAlign(Paint.Align.CENTER); 9203d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy canvas.drawTextOnPath(mText, mPath, 0.0f, 0.0f, mPaint); 9303d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy 9403d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy canvas.translate(250.0f, 0.0f); 9503d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy mPaint.setTextAlign(Paint.Align.RIGHT); 96325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy canvas.drawTextOnPath(mText, mPath, 0.0f, 0.0f, mPaint); 9703d58520c3eb6bb7efb7235bfd957550533d6725Romain Guy canvas.restore(); 98325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 99325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy } 100325740fb444af8fc7fb0119b2e30ce322c2ae134Romain Guy} 101