Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2010 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
Romain Guy | f607bdc | 2010-09-10 19:20:06 -0700 | [diff] [blame] | 17 | package com.android.test.hwui; |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 18 | |
Romain Guy | ed6fcb0 | 2011-03-21 13:11:28 -0700 | [diff] [blame] | 19 | import android.animation.ObjectAnimator; |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 20 | import android.app.Activity; |
| 21 | import android.content.Context; |
| 22 | import android.graphics.Bitmap; |
| 23 | import android.graphics.BitmapFactory; |
| 24 | import android.graphics.BitmapShader; |
| 25 | import android.graphics.Canvas; |
| 26 | import android.graphics.Paint; |
Romain Guy | 7230a74 | 2011-01-10 22:26:16 -0800 | [diff] [blame] | 27 | import android.graphics.drawable.ColorDrawable; |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 28 | import android.os.Bundle; |
| 29 | import android.view.View; |
| 30 | |
| 31 | @SuppressWarnings({"UnusedDeclaration"}) |
| 32 | public class LinesActivity extends Activity { |
Romain Guy | ed6fcb0 | 2011-03-21 13:11:28 -0700 | [diff] [blame] | 33 | private ObjectAnimator mAnimator; |
| 34 | |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 35 | @Override |
| 36 | protected void onCreate(Bundle savedInstanceState) { |
| 37 | super.onCreate(savedInstanceState); |
Romain Guy | 7230a74 | 2011-01-10 22:26:16 -0800 | [diff] [blame] | 38 | getWindow().setBackgroundDrawable(new ColorDrawable(0xffffffff)); |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 39 | final LinesView view = new LinesView(this); |
| 40 | setContentView(view); |
Romain Guy | ed6fcb0 | 2011-03-21 13:11:28 -0700 | [diff] [blame] | 41 | |
| 42 | mAnimator = ObjectAnimator.ofFloat(view, "offset", 0.0f, 15.0f); |
| 43 | mAnimator.setDuration(1500); |
| 44 | mAnimator.setRepeatCount(ObjectAnimator.INFINITE); |
| 45 | mAnimator.setRepeatMode(ObjectAnimator.REVERSE); |
| 46 | mAnimator.start(); |
| 47 | } |
| 48 | |
| 49 | @Override |
| 50 | protected void onDestroy() { |
| 51 | super.onDestroy(); |
| 52 | mAnimator.cancel(); |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 53 | } |
| 54 | |
Xavier Ducrohet | 63fd871 | 2010-12-21 01:33:04 -0800 | [diff] [blame] | 55 | public static class LinesView extends View { |
Chet Haase | 5b0200b | 2011-04-13 17:58:08 -0700 | [diff] [blame] | 56 | private static final boolean LINE_AA = true; |
Romain Guy | a957eea | 2010-12-08 18:34:42 -0800 | [diff] [blame] | 57 | |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 58 | private final Bitmap mBitmap1; |
| 59 | private final Paint mSmallPaint; |
| 60 | private final Paint mMediumPaint; |
| 61 | private final Paint mLargePaint; |
| 62 | private final BitmapShader mShader; |
| 63 | private final float[] mPoints; |
| 64 | private final Paint mAlphaPaint; |
Romain Guy | a957eea | 2010-12-08 18:34:42 -0800 | [diff] [blame] | 65 | private final Paint mHairLinePaint; |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 66 | |
Romain Guy | ed6fcb0 | 2011-03-21 13:11:28 -0700 | [diff] [blame] | 67 | private float mOffset; |
| 68 | |
Xavier Ducrohet | 63fd871 | 2010-12-21 01:33:04 -0800 | [diff] [blame] | 69 | public LinesView(Context c) { |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 70 | super(c); |
| 71 | |
| 72 | mBitmap1 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1); |
| 73 | |
| 74 | mSmallPaint = new Paint(); |
Romain Guy | a957eea | 2010-12-08 18:34:42 -0800 | [diff] [blame] | 75 | mSmallPaint.setAntiAlias(LINE_AA); |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 76 | mSmallPaint.setColor(0xffff0000); |
| 77 | mSmallPaint.setStrokeWidth(1.0f); |
| 78 | |
| 79 | mMediumPaint = new Paint(); |
Romain Guy | a957eea | 2010-12-08 18:34:42 -0800 | [diff] [blame] | 80 | mMediumPaint.setAntiAlias(LINE_AA); |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 81 | mMediumPaint.setColor(0xff0000ff); |
| 82 | mMediumPaint.setStrokeWidth(4.0f); |
| 83 | |
| 84 | mLargePaint = new Paint(); |
Romain Guy | a957eea | 2010-12-08 18:34:42 -0800 | [diff] [blame] | 85 | mLargePaint.setAntiAlias(LINE_AA); |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 86 | mLargePaint.setColor(0xff00ff00); |
| 87 | mLargePaint.setStrokeWidth(15.0f); |
| 88 | |
| 89 | mAlphaPaint = new Paint(); |
Romain Guy | a957eea | 2010-12-08 18:34:42 -0800 | [diff] [blame] | 90 | mAlphaPaint.setAntiAlias(LINE_AA); |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 91 | mAlphaPaint.setColor(0x7fff0050); |
| 92 | mAlphaPaint.setStrokeWidth(10.0f); |
Xavier Ducrohet | 63fd871 | 2010-12-21 01:33:04 -0800 | [diff] [blame] | 93 | |
Romain Guy | a957eea | 2010-12-08 18:34:42 -0800 | [diff] [blame] | 94 | mHairLinePaint = new Paint(); |
| 95 | mHairLinePaint.setAntiAlias(LINE_AA); |
| 96 | mHairLinePaint.setColor(0xff0000ff); |
| 97 | mHairLinePaint.setStrokeWidth(0.0f); |
| 98 | |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 99 | mShader = new BitmapShader(mBitmap1, BitmapShader.TileMode.MIRROR, |
| 100 | BitmapShader.TileMode.MIRROR); |
| 101 | |
| 102 | mPoints = new float[] { |
| 103 | 62.0f, 0.0f, 302.0f, 400.0f, |
| 104 | 302.0f, 400.0f, 352.0f, 400.0f, |
| 105 | 352.0f, 400.0f, 352.0f, 500.0f |
| 106 | }; |
| 107 | } |
Romain Guy | ed6fcb0 | 2011-03-21 13:11:28 -0700 | [diff] [blame] | 108 | |
| 109 | public void setOffset(float offset) { |
| 110 | mOffset = offset; |
| 111 | invalidate(); |
| 112 | } |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 113 | |
| 114 | @Override |
| 115 | protected void onDraw(Canvas canvas) { |
| 116 | super.onDraw(canvas); |
Romain Guy | ed6fcb0 | 2011-03-21 13:11:28 -0700 | [diff] [blame] | 117 | |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 118 | canvas.save(); |
| 119 | canvas.translate(100.0f, 20.0f); |
| 120 | |
| 121 | canvas.drawLine(0.0f, 0.0f, 40.0f, 400.0f, mSmallPaint); |
| 122 | canvas.drawLine(5.0f, 0.0f, 95.0f, 400.0f, mMediumPaint); |
| 123 | canvas.drawLine(22.0f, 0.0f, 162.0f, 400.0f, mLargePaint); |
Xavier Ducrohet | 63fd871 | 2010-12-21 01:33:04 -0800 | [diff] [blame] | 124 | |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 125 | mLargePaint.setShader(mShader); |
| 126 | canvas.drawLine(42.0f, 0.0f, 222.0f, 400.0f, mLargePaint); |
Romain Guy | ed6fcb0 | 2011-03-21 13:11:28 -0700 | [diff] [blame] | 127 | for (int x = 0; x < 20; x++) { |
| 128 | for (int y = 0; y < 20; y++) { |
| 129 | canvas.drawPoint(500.0f + x * (15.0f + mOffset), |
| 130 | y * (15.0f + mOffset), mLargePaint); |
| 131 | } |
| 132 | } |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 133 | mLargePaint.setShader(null); |
Xavier Ducrohet | 63fd871 | 2010-12-21 01:33:04 -0800 | [diff] [blame] | 134 | |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 135 | canvas.drawLines(mPoints, mAlphaPaint); |
Romain Guy | 759ea80 | 2010-09-16 20:49:46 -0700 | [diff] [blame] | 136 | |
| 137 | mSmallPaint.setAntiAlias(false); |
| 138 | canvas.drawLine(0.0f, 0.0f, 400.0f, 0.0f, mSmallPaint); |
Romain Guy | a957eea | 2010-12-08 18:34:42 -0800 | [diff] [blame] | 139 | mSmallPaint.setAntiAlias(LINE_AA); |
Romain Guy | 469b1db | 2010-10-05 11:49:57 -0700 | [diff] [blame] | 140 | canvas.drawLine(0.0f, 0.0f, 0.0f, 400.0f, mSmallPaint); |
| 141 | canvas.drawLine(0.0f, 400.0f, 400.0f, 400.0f, mSmallPaint); |
Xavier Ducrohet | 63fd871 | 2010-12-21 01:33:04 -0800 | [diff] [blame] | 142 | |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 143 | canvas.translate(120.0f, 0.0f); |
Xavier Ducrohet | 63fd871 | 2010-12-21 01:33:04 -0800 | [diff] [blame] | 144 | mAlphaPaint.setShader(mShader); |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 145 | canvas.drawLines(mPoints, mAlphaPaint); |
| 146 | mAlphaPaint.setShader(null); |
| 147 | |
| 148 | canvas.restore(); |
Xavier Ducrohet | 63fd871 | 2010-12-21 01:33:04 -0800 | [diff] [blame] | 149 | |
Romain Guy | ed6fcb0 | 2011-03-21 13:11:28 -0700 | [diff] [blame] | 150 | canvas.save(); |
Romain Guy | a957eea | 2010-12-08 18:34:42 -0800 | [diff] [blame] | 151 | canvas.scale(10.0f, 10.0f); |
| 152 | canvas.drawLine(50.0f, 40.0f, 10.0f, 40.0f, mSmallPaint); |
Chet Haase | 99ecdc4 | 2011-05-06 12:06:34 -0700 | [diff] [blame] | 153 | canvas.drawLine(10.0f, 45.0f, 20.0f, 55.0f, mSmallPaint); |
Romain Guy | a957eea | 2010-12-08 18:34:42 -0800 | [diff] [blame] | 154 | canvas.drawLine(10.0f, 60.0f, 50.0f, 60.0f, mHairLinePaint); |
| 155 | canvas.restore(); |
Romain Guy | 529b60a | 2010-08-03 18:05:47 -0700 | [diff] [blame] | 156 | } |
| 157 | } |
| 158 | } |