1529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy/*
2529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy * Copyright (C) 2010 The Android Open Source Project
3529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy *
4529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy * Licensed under the Apache License, Version 2.0 (the "License");
5529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy * you may not use this file except in compliance with the License.
6529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy * You may obtain a copy of the License at
7529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy *
8529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy *      http://www.apache.org/licenses/LICENSE-2.0
9529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy *
10529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy * Unless required by applicable law or agreed to in writing, software
11529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy * distributed under the License is distributed on an "AS IS" BASIS,
12529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy * See the License for the specific language governing permissions and
14529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy * limitations under the License.
15529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy */
16529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy
17f607bdc167f66b3e7003acaa4736ae46d78c1492Romain Guypackage com.android.test.hwui;
18529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy
19ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guyimport android.animation.ObjectAnimator;
20529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guyimport android.app.Activity;
21529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guyimport android.content.Context;
22529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guyimport android.graphics.Bitmap;
23529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guyimport android.graphics.BitmapFactory;
24529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guyimport android.graphics.BitmapShader;
25529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guyimport android.graphics.Canvas;
26529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guyimport android.graphics.Paint;
277230a74e9a36dfc6c4346c14e325bf07cd05b380Romain Guyimport android.graphics.drawable.ColorDrawable;
28529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guyimport android.os.Bundle;
29529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guyimport android.view.View;
30529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy
31529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy@SuppressWarnings({"UnusedDeclaration"})
32529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guypublic class LinesActivity extends Activity {
33ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy    private ObjectAnimator mAnimator;
34ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy
35529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy    @Override
36529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy    protected void onCreate(Bundle savedInstanceState) {
37529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy        super.onCreate(savedInstanceState);
387230a74e9a36dfc6c4346c14e325bf07cd05b380Romain Guy        getWindow().setBackgroundDrawable(new ColorDrawable(0xffffffff));
39529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy        final LinesView view = new LinesView(this);
40529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy        setContentView(view);
41ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy
42ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy        mAnimator = ObjectAnimator.ofFloat(view, "offset", 0.0f, 15.0f);
43ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy        mAnimator.setDuration(1500);
44ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy        mAnimator.setRepeatCount(ObjectAnimator.INFINITE);
45ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy        mAnimator.setRepeatMode(ObjectAnimator.REVERSE);
46ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy        mAnimator.start();
47ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy    }
48ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy
49ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy    @Override
50ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy    protected void onDestroy() {
51ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy        super.onDestroy();
52ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy        mAnimator.cancel();
53529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy    }
54529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy
5563fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet    public static class LinesView extends View {
565b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        private static final boolean LINE_AA = true;
57a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy
58529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy        private final Bitmap mBitmap1;
59529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy        private final Paint mSmallPaint;
60529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy        private final Paint mMediumPaint;
61529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy        private final Paint mLargePaint;
62529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy        private final BitmapShader mShader;
63529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy        private final float[] mPoints;
64529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy        private final Paint mAlphaPaint;
65a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy        private final Paint mHairLinePaint;
66529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy
67ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy        private float mOffset;
68ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy
6963fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet        public LinesView(Context c) {
70529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            super(c);
71529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy
72529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mBitmap1 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1);
73529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy
74529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mSmallPaint = new Paint();
75a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy            mSmallPaint.setAntiAlias(LINE_AA);
76529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mSmallPaint.setColor(0xffff0000);
77529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mSmallPaint.setStrokeWidth(1.0f);
78529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy
79529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mMediumPaint = new Paint();
80a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy            mMediumPaint.setAntiAlias(LINE_AA);
81529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mMediumPaint.setColor(0xff0000ff);
82529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mMediumPaint.setStrokeWidth(4.0f);
83529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy
84529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mLargePaint = new Paint();
85a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy            mLargePaint.setAntiAlias(LINE_AA);
86529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mLargePaint.setColor(0xff00ff00);
87529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mLargePaint.setStrokeWidth(15.0f);
88529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy
89529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mAlphaPaint = new Paint();
90a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy            mAlphaPaint.setAntiAlias(LINE_AA);
91529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mAlphaPaint.setColor(0x7fff0050);
92529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mAlphaPaint.setStrokeWidth(10.0f);
9363fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet
94a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy            mHairLinePaint = new Paint();
95a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy            mHairLinePaint.setAntiAlias(LINE_AA);
96a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy            mHairLinePaint.setColor(0xff0000ff);
97a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy            mHairLinePaint.setStrokeWidth(0.0f);
98a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy
99529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mShader = new BitmapShader(mBitmap1, BitmapShader.TileMode.MIRROR,
100529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy                    BitmapShader.TileMode.MIRROR);
101529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy
102529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mPoints = new float[] {
103529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy                    62.0f, 0.0f, 302.0f, 400.0f,
104529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy                    302.0f, 400.0f, 352.0f, 400.0f,
105529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy                    352.0f, 400.0f, 352.0f, 500.0f
106529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            };
107529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy        }
108ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy
109ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy        public void setOffset(float offset) {
110ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy            mOffset = offset;
111ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy            invalidate();
112ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy        }
113529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy
114529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy        @Override
115529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy        protected void onDraw(Canvas canvas) {
116529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            super.onDraw(canvas);
117ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy
118529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            canvas.save();
119529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            canvas.translate(100.0f, 20.0f);
120529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy
121529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            canvas.drawLine(0.0f, 0.0f, 40.0f, 400.0f, mSmallPaint);
122529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            canvas.drawLine(5.0f, 0.0f, 95.0f, 400.0f, mMediumPaint);
123529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            canvas.drawLine(22.0f, 0.0f, 162.0f, 400.0f, mLargePaint);
12463fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet
125529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mLargePaint.setShader(mShader);
126529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            canvas.drawLine(42.0f, 0.0f, 222.0f, 400.0f, mLargePaint);
127ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy            for (int x = 0; x < 20; x++) {
128ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy                for (int y = 0; y < 20; y++) {
129ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy                    canvas.drawPoint(500.0f + x * (15.0f + mOffset),
130ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy                            y * (15.0f + mOffset), mLargePaint);
131ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy                }
132ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy            }
133529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mLargePaint.setShader(null);
13463fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet
135529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            canvas.drawLines(mPoints, mAlphaPaint);
136759ea80dca64ad652110a129e0d8bf93fea79f61Romain Guy
137759ea80dca64ad652110a129e0d8bf93fea79f61Romain Guy            mSmallPaint.setAntiAlias(false);
138759ea80dca64ad652110a129e0d8bf93fea79f61Romain Guy            canvas.drawLine(0.0f, 0.0f, 400.0f, 0.0f, mSmallPaint);
139a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy            mSmallPaint.setAntiAlias(LINE_AA);
140469b1dbeaf7d3267d1b43af4e7391b49eac10ee0Romain Guy            canvas.drawLine(0.0f, 0.0f, 0.0f, 400.0f, mSmallPaint);
141469b1dbeaf7d3267d1b43af4e7391b49eac10ee0Romain Guy            canvas.drawLine(0.0f, 400.0f, 400.0f, 400.0f, mSmallPaint);
14263fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet
143529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            canvas.translate(120.0f, 0.0f);
14463fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet            mAlphaPaint.setShader(mShader);
145529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            canvas.drawLines(mPoints, mAlphaPaint);
146529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            mAlphaPaint.setShader(null);
147529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy
148529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy            canvas.restore();
14963fd87113cea6abec97a6cd966e090e9b590fc3bXavier Ducrohet
150ed6fcb034b44d9a6ac2fc72fee6030417811f234Romain Guy            canvas.save();
151a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy            canvas.scale(10.0f, 10.0f);
152a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy            canvas.drawLine(50.0f, 40.0f, 10.0f, 40.0f, mSmallPaint);
15399ecdc480dd4f9b550b2a62ea39f77845a4fec49Chet Haase            canvas.drawLine(10.0f, 45.0f, 20.0f, 55.0f, mSmallPaint);
154a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy            canvas.drawLine(10.0f, 60.0f, 50.0f, 60.0f, mHairLinePaint);
155a957eea78557cb47a91d44d9e6ee641c58cf1c07Romain Guy            canvas.restore();
15675040f8a7727f18bb33da23696a32a0760926ff2Chris Craik
15775040f8a7727f18bb33da23696a32a0760926ff2Chris Craik            canvas.save();
15875040f8a7727f18bb33da23696a32a0760926ff2Chris Craik            canvas.scale(10.0f, 50.0f);
15975040f8a7727f18bb33da23696a32a0760926ff2Chris Craik            mSmallPaint.setStrokeWidth(0.0f);
16075040f8a7727f18bb33da23696a32a0760926ff2Chris Craik            canvas.drawLine(20.0f, 9.0f, 30.0f, 11.0f, mSmallPaint);
16175040f8a7727f18bb33da23696a32a0760926ff2Chris Craik            mSmallPaint.setStrokeWidth(1.0f);
16275040f8a7727f18bb33da23696a32a0760926ff2Chris Craik            canvas.drawLine(30.0f, 9.0f, 40.0f, 11.0f, mSmallPaint);
16375040f8a7727f18bb33da23696a32a0760926ff2Chris Craik            canvas.restore();
164529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy        }
165529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy    }
166529b60a3b16ac3dff24f2403d760ab8ebc9670ffRomain Guy}
167