18a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase/*
28a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase * Copyright (C) 2011 The Android Open Source Project
38a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase *
48a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase * Licensed under the Apache License, Version 2.0 (the "License");
58a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase * you may not use this file except in compliance with the License.
68a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase * You may obtain a copy of the License at
78a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase *
88a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase *      http://www.apache.org/licenses/LICENSE-2.0
98a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase *
108a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase * Unless required by applicable law or agreed to in writing, software
118a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase * distributed under the License is distributed on an "AS IS" BASIS,
128a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase * See the License for the specific language governing permissions and
148a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase * limitations under the License.
158a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase */
168a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
178a5cc92a150bae38ec43732d941b38bb381fe153Chet Haasepackage com.android.test.hwui;
188a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
198a5cc92a150bae38ec43732d941b38bb381fe153Chet Haaseimport android.animation.ObjectAnimator;
208a5cc92a150bae38ec43732d941b38bb381fe153Chet Haaseimport android.app.Activity;
218a5cc92a150bae38ec43732d941b38bb381fe153Chet Haaseimport android.content.Context;
228a5cc92a150bae38ec43732d941b38bb381fe153Chet Haaseimport android.graphics.Canvas;
238a5cc92a150bae38ec43732d941b38bb381fe153Chet Haaseimport android.graphics.Color;
248a5cc92a150bae38ec43732d941b38bb381fe153Chet Haaseimport android.graphics.Paint;
258a5cc92a150bae38ec43732d941b38bb381fe153Chet Haaseimport android.graphics.drawable.ColorDrawable;
268a5cc92a150bae38ec43732d941b38bb381fe153Chet Haaseimport android.os.Bundle;
278a5cc92a150bae38ec43732d941b38bb381fe153Chet Haaseimport android.view.View;
288a5cc92a150bae38ec43732d941b38bb381fe153Chet Haaseimport android.widget.FrameLayout;
298a5cc92a150bae38ec43732d941b38bb381fe153Chet Haaseimport android.widget.LinearLayout;
308a5cc92a150bae38ec43732d941b38bb381fe153Chet Haaseimport android.widget.ProgressBar;
318a5cc92a150bae38ec43732d941b38bb381fe153Chet Haaseimport android.widget.SeekBar;
328a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
338a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase@SuppressWarnings({"UnusedDeclaration"})
348a5cc92a150bae38ec43732d941b38bb381fe153Chet Haasepublic class PointsActivity extends Activity {
358a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
368a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase    float mSeekValue = .5f;
378a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
388a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase    @Override
398a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase    protected void onCreate(Bundle savedInstanceState) {
408a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        super.onCreate(savedInstanceState);
418a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        getWindow().setBackgroundDrawable(new ColorDrawable(0xff000000));
428a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        SeekBar slider = new SeekBar(this);
438a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        LinearLayout container = new LinearLayout(this);
448a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        container.setOrientation(LinearLayout.VERTICAL);
458a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        setContentView(container);
468a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
478a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        container.addView(slider);
488a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        slider.setMax(100);
498a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        slider.setProgress(50);
508a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        FrameLayout frame = new FrameLayout(this);
518a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        final RenderingView gpuView = new RenderingView(this, Color.GREEN);
528a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        frame.addView(gpuView);
538a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        final RenderingView swView = new RenderingView(this, Color.RED);
548a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        swView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
558a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        frame.addView(swView);
568a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        container.addView(frame);
578a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
588a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        slider.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
598a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            @Override
608a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
618a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                mSeekValue = (float)progress / 100.0f;
628a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                float gpuAlpha = Math.min(2.0f * mSeekValue, 1f);
638a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                gpuView.setAlpha(gpuAlpha);
648a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                float swAlpha = Math.min((1 - mSeekValue) * 2.0f, 1f);
658a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                System.out.println("(gpuAlpha, swAlpha = " + gpuAlpha + ", " + swAlpha);
668a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                swView.setAlpha(swAlpha);
678a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            }
688a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
698a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            @Override
708a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            public void onStartTrackingTouch(SeekBar seekBar) {
718a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            }
728a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
738a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            @Override
748a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            public void onStopTrackingTouch(SeekBar seekBar) {
758a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            }
768a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        });
778a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase    }
788a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
798a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase    @Override
808a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase    protected void onDestroy() {
818a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        super.onDestroy();
828a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase    }
838a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
848a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase    public static class RenderingView extends View {
858a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
868a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        private int mColor;
878a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
888a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        public RenderingView(Context c, int color) {
898a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            super(c);
908a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            mColor = color;
918a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        }
928a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
938a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        private void drawPoints(Canvas canvas, Paint p, float xOffset, float yOffset) {
948a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        }
958a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
968a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        @Override
978a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        protected void onDraw(Canvas canvas) {
988a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            super.onDraw(canvas);
998a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            Paint p = new Paint();
1008a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            p.setColor(mColor);
1018a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
1028a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            float yOffset = 0;
1038a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            for (int i = 0; i < 2; ++i) {
1048a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                float xOffset = 0;
1058a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
1068a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                p.setStrokeWidth(0f);
1078a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                p.setStrokeCap(Paint.Cap.SQUARE);
1088a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                canvas.drawPoint(100 + xOffset, 100 + yOffset, p);
1098a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                xOffset += 5;
1108a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
1118a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                p.setStrokeWidth(1f);
1128a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                canvas.drawPoint(100 + xOffset, 100 + yOffset, p);
1138a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                xOffset += 15;
1148a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
1158a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                p.setStrokeWidth(20);
1168a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                canvas.drawPoint(100 + xOffset, 100 + yOffset, p);
1178a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                xOffset += 30;
1188a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
1198a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                p.setStrokeCap(Paint.Cap.ROUND);
1208a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                canvas.drawPoint(100 + xOffset, 100 + yOffset, p);
1218a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
1228a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                p.setAntiAlias(true);
1238a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase                yOffset += 30;
1248a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase            }
1258a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase
1268a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase        }
1278a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase    }
1288a5cc92a150bae38ec43732d941b38bb381fe153Chet Haase}
129