/*
* Copyright (C) 2010 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.android.test.hwui;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.View;
@SuppressWarnings({"UnusedDeclaration"})
public class PathsActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final PathsView view = new PathsView(this);
setContentView(view);
}
public static class PathsView extends View {
private final Bitmap mBitmap1;
private final Paint mSmallPaint;
private final Paint mMediumPaint;
private final Paint mLargePaint;
private final BitmapShader mShader;
private final Path mPath;
private final RectF mPathBounds;
private final Paint mBoundsPaint;
private final Bitmap mBitmap;
private final float mOffset;
private final Paint mLinePaint;
public PathsView(Context c) {
super(c);
mBitmap1 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1);
mSmallPaint = new Paint();
mSmallPaint.setAntiAlias(true);
mSmallPaint.setColor(0xffff0000);
mSmallPaint.setStrokeWidth(1.0f);
mSmallPaint.setStyle(Paint.Style.STROKE);
mLinePaint = new Paint();
mLinePaint.setAntiAlias(true);
mLinePaint.setColor(0xffff00ff);
mLinePaint.setStrokeWidth(1.0f);
mLinePaint.setStyle(Paint.Style.STROKE);
mMediumPaint = new Paint();
mMediumPaint.setAntiAlias(true);
mMediumPaint.setColor(0xe00000ff);
mMediumPaint.setStrokeWidth(10.0f);
mMediumPaint.setStyle(Paint.Style.STROKE);
mLargePaint = new Paint();
mLargePaint.setAntiAlias(true);
mLargePaint.setColor(0x7f00ff00);
mLargePaint.setStrokeWidth(15.0f);
mLargePaint.setStyle(Paint.Style.FILL);
mShader = new BitmapShader(mBitmap1, BitmapShader.TileMode.MIRROR,
BitmapShader.TileMode.MIRROR);
mPath = new Path();
mPath.moveTo(0.0f, 0.0f);
mPath.cubicTo(0.0f, 0.0f, 100.0f, 150.0f, 100.0f, 200.0f);
mPath.cubicTo(100.0f, 200.0f, 50.0f, 300.0f, -80.0f, 200.0f);
mPath.cubicTo(-80.0f, 200.0f, 100.0f, 200.0f, 200.0f, 0.0f);
mPathBounds = new RectF();
mPath.computeBounds(mPathBounds, true);
mBoundsPaint = new Paint();
mBoundsPaint.setColor(0x4000ff00);
mOffset = mMediumPaint.getStrokeWidth();
final int width = (int) (mPathBounds.width() + mOffset * 3.0f + 0.5f);
final int height = (int) (mPathBounds.height() + mOffset * 3.0f + 0.5f);
mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8);
Canvas canvas = new Canvas(mBitmap);
canvas.translate(-mPathBounds.left + mOffset * 1.5f, -mPathBounds.top + mOffset * 1.5f);
canvas.drawPath(mPath, mMediumPaint);
canvas.setBitmap(null);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawARGB(255, 255, 255, 255);
canvas.save();
canvas.translate(200.0f, 60.0f);
canvas.drawPath(mPath, mSmallPaint);
canvas.translate(350.0f, 0.0f);
canvas.drawPath(mPath, mMediumPaint);
mLargePaint.setShader(mShader);
canvas.translate(350.0f, 0.0f);
canvas.drawPath(mPath, mLargePaint);
mLargePaint.setShader(null);
canvas.restore();
canvas.save();
canvas.translate(200.0f, 360.0f);
canvas.drawPath(mPath, mSmallPaint);
canvas.drawRect(mPathBounds, mBoundsPaint);
canvas.translate(350.0f, 0.0f);
canvas.drawBitmap(mBitmap, mPathBounds.left - mOffset * 1.5f,
mPathBounds.top - mOffset * 1.5f, null);
canvas.drawRect(mPathBounds, mBoundsPaint);
canvas.drawLine(0.0f, -360.0f, 0.0f, 500.0f, mLinePaint);
mLargePaint.setShader(mShader);
canvas.translate(350.0f, 0.0f);
canvas.drawPath(mPath, mLargePaint);
canvas.drawRect(mPathBounds, mBoundsPaint);
mLargePaint.setShader(null);
canvas.restore();
}
}
}