diff options
author | Romain Guy <romainguy@google.com> | 2012-02-28 18:17:02 -0800 |
---|---|---|
committer | Romain Guy <romainguy@google.com> | 2012-02-29 19:14:37 -0800 |
commit | 9777173eb6c9eb97c7921c8288ebc65e3ab3ce6f (patch) | |
tree | 0c2749e602c75cf72a3a2d6ffd480a47f975fdd5 /tests/HwAccelerationTest | |
parent | 765dcf32307dbd93ce43f064c426ce157be2d2ae (diff) | |
download | frameworks_base-9777173eb6c9eb97c7921c8288ebc65e3ab3ce6f.zip frameworks_base-9777173eb6c9eb97c7921c8288ebc65e3ab3ce6f.tar.gz frameworks_base-9777173eb6c9eb97c7921c8288ebc65e3ab3ce6f.tar.bz2 |
Full implementation of Canvas.drawPath()
Change-Id: I23223b89770a0cd2b4762365bead9bfddb094290
Diffstat (limited to 'tests/HwAccelerationTest')
-rw-r--r-- | tests/HwAccelerationTest/src/com/android/test/hwui/TextOnPathActivity.java | 55 |
1 files changed, 54 insertions, 1 deletions
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/TextOnPathActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/TextOnPathActivity.java index b798ee7..9849e3c 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/TextOnPathActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/TextOnPathActivity.java @@ -21,18 +21,21 @@ import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; +import android.graphics.PathMeasure; import android.os.Bundle; import android.view.View; @SuppressWarnings({"UnusedDeclaration"}) public class TextOnPathActivity extends Activity { private Path mPath; + private Path mStraightPath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPath = makePath(); + mStraightPath = makeStraightPath(); final TextOnPathView view = new TextOnPathView(this); setContentView(view); @@ -51,11 +54,28 @@ public class TextOnPathActivity extends Activity { path.cubicTo(-80.0f, 200.0f, 100.0f, 200.0f, 200.0f, 0.0f); } + private Path makeStraightPath() { + Path path = new Path(); + buildStraightPath(path); + return path; + } + + private void buildStraightPath(Path path) { + path.moveTo(0.0f, 0.0f); + path.lineTo(400.0f, 0.0f); + } + public class TextOnPathView extends View { private static final String TEST_STRING = "Hello OpenGL renderer, text on path! "; private final Paint mPaint; + private final Paint mPathPaint; private final String mText; + private final PathMeasure mMeasure; + private final float mLength; + private final float[] mLines; + private final float[] mPos; + private final float[] mTan; public TextOnPathView(Context c) { super(c); @@ -64,11 +84,23 @@ public class TextOnPathActivity extends Activity { mPaint.setAntiAlias(true); mPaint.setColor(0xff000000); + mPathPaint = new Paint(); + mPathPaint.setAntiAlias(true); + mPathPaint.setStyle(Paint.Style.STROKE); + mPathPaint.setColor(0xff000099); + StringBuilder builder = new StringBuilder(TEST_STRING.length() * 2); for (int i = 0; i < 2; i++) { builder.append(TEST_STRING); } mText = builder.toString(); + + mMeasure = new PathMeasure(mPath, false); + mLength = mMeasure.getLength(); + + mLines = new float[100 * 4]; + mPos = new float[2]; + mTan = new float[2]; } @Override @@ -81,19 +113,40 @@ public class TextOnPathActivity extends Activity { canvas.translate(400.0f, 350.0f); mPaint.setTextAlign(Paint.Align.LEFT); canvas.drawTextOnPath(mText + mText, mPath, 0.0f, 0.0f, mPaint); + canvas.drawPath(mPath, mPathPaint); + + for (int i = 0; i < 100; i++) { + mMeasure.getPosTan(i * mLength / 100.0f, mPos, mTan); + mLines[i * 4 ] = mPos[0]; + mLines[i * 4 + 1] = mPos[1]; + mLines[i * 4 + 2] = mPos[0] + mTan[1] * 15; + mLines[i * 4 + 3] = mPos[1] - mTan[0] * 15; + } + canvas.drawLines(mLines, mPathPaint); + + canvas.translate(200.0f, 0.0f); + canvas.drawTextOnPath(mText + mText, mStraightPath, 0.0f, 0.0f, mPaint); + canvas.drawPath(mStraightPath, mPathPaint); + canvas.restore(); canvas.save(); canvas.translate(150.0f, 60.0f); - canvas.drawTextOnPath(mText, mPath, 0.0f, 0.0f, mPaint); + canvas.drawTextOnPath(mText, mPath, 0.0f, 10.0f, mPaint); + mMeasure.getPosTan(5.0f, mPos, mTan); + canvas.drawLine(mPos[0], mPos[1], mPos[0] + mTan[1] * 10, mPos[1] - mTan[0] * 10, + mPathPaint); + canvas.drawPath(mPath, mPathPaint); canvas.translate(250.0f, 0.0f); mPaint.setTextAlign(Paint.Align.CENTER); canvas.drawTextOnPath(mText, mPath, 0.0f, 0.0f, mPaint); + canvas.drawPath(mPath, mPathPaint); canvas.translate(250.0f, 0.0f); mPaint.setTextAlign(Paint.Align.RIGHT); canvas.drawTextOnPath(mText, mPath, 0.0f, 0.0f, mPaint); + canvas.drawPath(mPath, mPathPaint); canvas.restore(); } } |