1db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy/*
2db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy * Copyright (C) 2010 The Android Open Source Project
3db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy *
4db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy * Licensed under the Apache License, Version 2.0 (the "License");
5db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy * you may not use this file except in compliance with the License.
6db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy * You may obtain a copy of the License at
7db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy *
8db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy *      http://www.apache.org/licenses/LICENSE-2.0
9db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy *
10db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy * Unless required by applicable law or agreed to in writing, software
11db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy * distributed under the License is distributed on an "AS IS" BASIS,
12db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy * See the License for the specific language governing permissions and
14db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy * limitations under the License.
15db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy */
16db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
17f607bdc167f66b3e7003acaa4736ae46d78c1492Romain Guypackage com.android.test.hwui;
18db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
19db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guyimport android.app.Activity;
20db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guyimport android.content.Context;
21db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guyimport android.graphics.Bitmap;
22db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guyimport android.graphics.BitmapFactory;
23db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guyimport android.graphics.Canvas;
24db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guyimport android.graphics.ColorMatrix;
25db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guyimport android.graphics.ColorMatrixColorFilter;
26db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guyimport android.graphics.LightingColorFilter;
27db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guyimport android.graphics.Paint;
28db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guyimport android.graphics.PorterDuff;
29db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guyimport android.graphics.PorterDuffColorFilter;
30db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guyimport android.os.Bundle;
31db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guyimport android.view.View;
32db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
33db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy@SuppressWarnings({"UnusedDeclaration"})
34db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guypublic class ColorFiltersActivity extends Activity {
35db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy    @Override
36db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy    protected void onCreate(Bundle savedInstanceState) {
37db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy        super.onCreate(savedInstanceState);
38db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy        final BitmapsView view = new BitmapsView(this);
39db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy        setContentView(view);
40db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy    }
41db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
42db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy    static class BitmapsView extends View {
43db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy        private final Bitmap mBitmap1;
44db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy        private final Bitmap mBitmap2;
45db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy        private final Paint mColorMatrixPaint;
46db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy        private final Paint mLightingPaint;
47db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy        private final Paint mBlendPaint;
48db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
49db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy        BitmapsView(Context c) {
50db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            super(c);
51db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
52db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            mBitmap1 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1);
53db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            mBitmap2 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset2);
54db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
55db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            mColorMatrixPaint = new Paint();
56db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            final ColorMatrix colorMatrix = new ColorMatrix();
57db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            colorMatrix.setSaturation(0);
58db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            mColorMatrixPaint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
59db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
60db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            mLightingPaint = new Paint();
61db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            mLightingPaint.setColorFilter(new LightingColorFilter(0x0060ffff, 0x00101030));
62db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
63db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            mBlendPaint = new Paint();
64db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            mBlendPaint.setColorFilter(new PorterDuffColorFilter(0x7f990040,
65db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy                    PorterDuff.Mode.SRC_OVER));
66db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy        }
67db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
68db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy        @Override
69db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy        protected void onDraw(Canvas canvas) {
70db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            super.onDraw(canvas);
71db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
72db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.drawARGB(255, 255, 255, 255);
73db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
74db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.save();
75db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.translate(120.0f, 50.0f);
76db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.drawBitmap(mBitmap1, 0.0f, 0.0f, mColorMatrixPaint);
77db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
78db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.translate(0.0f, 50.0f + mBitmap1.getHeight());
79db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.drawBitmap(mBitmap1, 0.0f, 0.0f, mLightingPaint);
80db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
81db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.translate(0.0f, 50.0f + mBitmap1.getHeight());
82db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.drawBitmap(mBitmap1, 0.0f, 0.0f, mBlendPaint);
83db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.restore();
84db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
85db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.save();
86db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.translate(120.0f + mBitmap1.getWidth() + 120.0f, 50.0f);
87db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.drawBitmap(mBitmap2, 0.0f, 0.0f, mColorMatrixPaint);
88db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
89db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.translate(0.0f, 50.0f + mBitmap2.getHeight());
90db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.drawBitmap(mBitmap2, 0.0f, 0.0f, mLightingPaint);
91db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy
92db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.translate(0.0f, 50.0f + mBitmap2.getHeight());
93db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.drawBitmap(mBitmap2, 0.0f, 0.0f, mBlendPaint);
94db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy            canvas.restore();
95db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy        }
96db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy    }
97db1938e0e6ef816e228c815adccebd5cb05f2aa8Romain Guy}
98