MoreShadersActivity.java revision 3a03eeedafb3e3335b56bdb9c0a2f02104d32299
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
17package com.android.test.hwui;
18
19import android.app.Activity;
20import android.content.Context;
21import android.graphics.Bitmap;
22import android.graphics.BitmapFactory;
23import android.graphics.BitmapShader;
24import android.graphics.Canvas;
25import android.graphics.Color;
26import android.graphics.ColorFilter;
27import android.graphics.ComposeShader;
28import android.graphics.LightingColorFilter;
29import android.graphics.LinearGradient;
30import android.graphics.Matrix;
31import android.graphics.Paint;
32import android.graphics.PorterDuff;
33import android.graphics.Shader;
34import android.os.Bundle;
35import android.view.View;
36
37@SuppressWarnings({"UnusedDeclaration"})
38public class MoreShadersActivity extends Activity {
39    @Override
40    protected void onCreate(Bundle savedInstanceState) {
41        super.onCreate(savedInstanceState);
42
43        setContentView(new ShadersView(this));
44    }
45
46    static class ShadersView extends View {
47        private BitmapShader mScaledShader;
48        private int mTexWidth;
49        private int mTexHeight;
50        private Paint mPaint;
51        private float mDrawWidth;
52        private float mDrawHeight;
53        private LinearGradient mHorGradient;
54        private LinearGradient mVertGradient;
55        private ComposeShader mComposeShader;
56        private ComposeShader mCompose2Shader;
57        private Paint mLargePaint;
58        private BitmapShader mScaled2Shader;
59        private ColorFilter mColorFilter;
60
61        ShadersView(Context c) {
62            super(c);
63
64            Bitmap texture = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1);
65            mTexWidth = texture.getWidth();
66            mTexHeight = texture.getHeight();
67            mDrawWidth = mTexWidth * 2.2f;
68            mDrawHeight = mTexHeight * 1.2f;
69
70            mScaledShader = new BitmapShader(texture, Shader.TileMode.MIRROR,
71                    Shader.TileMode.MIRROR);
72            Matrix m2 = new Matrix();
73            m2.setScale(0.5f, 0.5f);
74            mScaledShader.setLocalMatrix(m2);
75
76            mScaled2Shader = new BitmapShader(texture, Shader.TileMode.MIRROR,
77                    Shader.TileMode.MIRROR);
78            Matrix m3 = new Matrix();
79            m3.setScale(0.1f, 0.1f);
80            mScaled2Shader.setLocalMatrix(m3);
81
82            mHorGradient = new LinearGradient(0.0f, 0.0f, mDrawWidth, 0.0f,
83                    Color.RED, 0x7f00ff00, Shader.TileMode.CLAMP);
84
85            mVertGradient = new LinearGradient(0.0f, 0.0f, 0.0f, mDrawHeight / 2.0f,
86                    Color.YELLOW, Color.MAGENTA, Shader.TileMode.MIRROR);
87
88            mComposeShader = new ComposeShader(mScaledShader, mHorGradient,
89                    PorterDuff.Mode.SRC_OVER);
90            mCompose2Shader = new ComposeShader(mHorGradient, mScaledShader,
91                    PorterDuff.Mode.SRC_OUT);
92
93            mColorFilter = new LightingColorFilter(0x0060ffff, 0x00101030);
94
95            mLargePaint = new Paint();
96            mLargePaint.setAntiAlias(true);
97            mLargePaint.setTextSize(36.0f);
98            mLargePaint.setColor(0xff000000);
99            mLargePaint.setShadowLayer(3.0f, 0.0f, 3.0f, 0x7f00ff00);
100
101            mPaint = new Paint();
102        }
103
104        @Override
105        protected void onDraw(Canvas canvas) {
106            super.onDraw(canvas);
107            canvas.drawRGB(255, 255, 255);
108
109            canvas.save();
110            canvas.translate(40.0f, 40.0f);
111
112            mPaint.setShader(mComposeShader);
113            canvas.drawRect(0.0f, 0.0f, mDrawWidth, mDrawHeight, mPaint);
114
115            canvas.translate(0.0f, 40.0f + mDrawHeight);
116            mPaint.setShader(mCompose2Shader);
117            canvas.drawRect(0.0f, 0.0f, mDrawWidth, mDrawHeight, mPaint);
118
119            canvas.restore();
120
121            canvas.save();
122            canvas.translate(40.0f + mDrawWidth + 40.0f, 40.0f);
123
124            mLargePaint.setShader(mHorGradient);
125            canvas.drawText("OpenGL rendering", 0.0f, 20.0f, mLargePaint);
126
127            mLargePaint.setShader(mScaled2Shader);
128            canvas.drawText("OpenGL rendering", 0.0f, 60.0f, mLargePaint);
129
130            mLargePaint.setShader(mCompose2Shader);
131            mLargePaint.setColorFilter(mColorFilter);
132            canvas.drawText("OpenGL rendering", 0.0f, 100.0f, mLargePaint);
133            mLargePaint.setColorFilter(null);
134
135            canvas.translate(0.0f, 40.0f + mDrawHeight);
136            mLargePaint.setShader(mVertGradient);
137            canvas.drawText("OpenGL rendering", 0.0f, 20.0f, mLargePaint);
138
139            canvas.restore();
140        }
141    }
142}
143