blob: 1d18f61986ba07862e820712b010364eb118f017 [file] [log] [blame]
Romain Guyd27977d2010-07-14 19:18:51 -07001/*
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 Guyf607bdc2010-09-10 19:20:06 -070017package com.android.test.hwui;
Romain Guyd27977d2010-07-14 19:18:51 -070018
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.LinearGradient;
27import android.graphics.Matrix;
28import android.graphics.Paint;
29import android.graphics.Shader;
30import android.os.Bundle;
31import android.view.View;
32
33@SuppressWarnings({"UnusedDeclaration"})
34public class ShadersActivity extends Activity {
35 @Override
36 protected void onCreate(Bundle savedInstanceState) {
37 super.onCreate(savedInstanceState);
38
39 setContentView(new ShadersView(this));
40 }
41
Xavier Ducrohetd348b6e2010-12-20 08:22:47 -080042 public static class ShadersView extends View {
Romain Guyd27977d2010-07-14 19:18:51 -070043 private BitmapShader mRepeatShader;
44 private BitmapShader mTranslatedShader;
45 private BitmapShader mScaledShader;
46 private int mTexWidth;
47 private int mTexHeight;
48 private Paint mPaint;
49 private float mDrawWidth;
50 private float mDrawHeight;
51 private LinearGradient mHorGradient;
52 private LinearGradient mDiagGradient;
53 private LinearGradient mVertGradient;
Romain Guy8164c2d2010-10-25 18:03:28 -070054 private Bitmap mTexture;
Xavier Ducrohet63fd8712010-12-21 01:33:04 -080055 private Matrix mMtx1;
56 private Matrix mMtx2;
57 private Matrix mMtx3;
Romain Guyd27977d2010-07-14 19:18:51 -070058
Xavier Ducrohetd348b6e2010-12-20 08:22:47 -080059 public ShadersView(Context c) {
Romain Guyd27977d2010-07-14 19:18:51 -070060 super(c);
61
Romain Guy8164c2d2010-10-25 18:03:28 -070062 mTexture = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1);
63 mTexWidth = mTexture.getWidth();
64 mTexHeight = mTexture.getHeight();
Romain Guyd27977d2010-07-14 19:18:51 -070065 mDrawWidth = mTexWidth * 2.2f;
66 mDrawHeight = mTexHeight * 1.2f;
67
Romain Guy8164c2d2010-10-25 18:03:28 -070068 mRepeatShader = new BitmapShader(mTexture, Shader.TileMode.REPEAT,
Romain Guyd27977d2010-07-14 19:18:51 -070069 Shader.TileMode.REPEAT);
70
Romain Guy8164c2d2010-10-25 18:03:28 -070071 mTranslatedShader = new BitmapShader(mTexture, Shader.TileMode.REPEAT,
Romain Guyd27977d2010-07-14 19:18:51 -070072 Shader.TileMode.REPEAT);
Xavier Ducrohet63fd8712010-12-21 01:33:04 -080073 mMtx1 = new Matrix();
74 mMtx1.setTranslate(mTexWidth / 2.0f, mTexHeight / 2.0f);
75 mMtx1.postRotate(45, 0, 0);
76 mTranslatedShader.setLocalMatrix(mMtx1);
Xavier Ducrohetd348b6e2010-12-20 08:22:47 -080077
Romain Guy8164c2d2010-10-25 18:03:28 -070078 mScaledShader = new BitmapShader(mTexture, Shader.TileMode.MIRROR,
Romain Guyd27977d2010-07-14 19:18:51 -070079 Shader.TileMode.MIRROR);
Xavier Ducrohet63fd8712010-12-21 01:33:04 -080080 mMtx2 = new Matrix();
81 mMtx2.setScale(0.5f, 0.5f);
82 mScaledShader.setLocalMatrix(mMtx2);
Romain Guyd27977d2010-07-14 19:18:51 -070083
Romain Guy0bb56672010-10-01 00:25:02 -070084 mHorGradient = new LinearGradient(0.0f, 0.0f, 1.0f, 0.0f,
Romain Guyae5575b2010-07-29 18:48:04 -070085 Color.RED, Color.GREEN, Shader.TileMode.CLAMP);
Xavier Ducrohet63fd8712010-12-21 01:33:04 -080086 mMtx3 = new Matrix();
87 mMtx3.setScale(mDrawHeight, 1.0f);
88 mMtx3.postRotate(-90.0f);
89 mMtx3.postTranslate(0.0f, mDrawHeight);
90 mHorGradient.setLocalMatrix(mMtx3);
Xavier Ducrohetd348b6e2010-12-20 08:22:47 -080091
Romain Guyd27977d2010-07-14 19:18:51 -070092 mDiagGradient = new LinearGradient(0.0f, 0.0f, mDrawWidth / 1.5f, mDrawHeight,
93 Color.BLUE, Color.MAGENTA, Shader.TileMode.CLAMP);
Xavier Ducrohetd348b6e2010-12-20 08:22:47 -080094
Romain Guyd27977d2010-07-14 19:18:51 -070095 mVertGradient = new LinearGradient(0.0f, 0.0f, 0.0f, mDrawHeight / 2.0f,
96 Color.YELLOW, Color.MAGENTA, Shader.TileMode.MIRROR);
97
98 mPaint = new Paint();
99 }
100
101 @Override
102 protected void onDraw(Canvas canvas) {
103 super.onDraw(canvas);
Romain Guyc0ac1932010-07-19 18:43:02 -0700104 //canvas.drawRGB(255, 255, 255);
Romain Guy8164c2d2010-10-25 18:03:28 -0700105 canvas.drawBitmap(mTexture, 0.0f, 0.0f, null);
Romain Guyd27977d2010-07-14 19:18:51 -0700106
107 // Bitmap shaders
108 canvas.save();
109 canvas.translate(40.0f, 40.0f);
110
111 mPaint.setShader(mRepeatShader);
112 canvas.drawRect(0.0f, 0.0f, mDrawWidth, mDrawHeight, mPaint);
Xavier Ducrohetd348b6e2010-12-20 08:22:47 -0800113
Romain Guyd27977d2010-07-14 19:18:51 -0700114 canvas.translate(0.0f, 40.0f + mDrawHeight);
115 mPaint.setShader(mTranslatedShader);
116 canvas.drawRect(0.0f, 0.0f, mDrawWidth, mDrawHeight, mPaint);
117
118 canvas.translate(0.0f, 40.0f + mDrawHeight);
119 mPaint.setShader(mScaledShader);
120 canvas.drawRect(0.0f, 0.0f, mDrawWidth, mDrawHeight, mPaint);
121
122 canvas.restore();
123
124 // Gradients
125 canvas.save();
126 canvas.translate(40.0f + mDrawWidth + 40.0f, 40.0f);
127
128 mPaint.setShader(mHorGradient);
129 canvas.drawRect(0.0f, 0.0f, mDrawWidth, mDrawHeight, mPaint);
Xavier Ducrohetd348b6e2010-12-20 08:22:47 -0800130
Romain Guyd27977d2010-07-14 19:18:51 -0700131 canvas.translate(0.0f, 40.0f + mDrawHeight);
132 mPaint.setShader(mDiagGradient);
133 canvas.drawRect(0.0f, 0.0f, mDrawWidth, mDrawHeight, mPaint);
134
135 canvas.translate(0.0f, 40.0f + mDrawHeight);
136 mPaint.setShader(mVertGradient);
137 canvas.drawRect(0.0f, 0.0f, mDrawWidth, mDrawHeight, mPaint);
Xavier Ducrohetd348b6e2010-12-20 08:22:47 -0800138
Romain Guyd27977d2010-07-14 19:18:51 -0700139 canvas.restore();
140 }
141 }
142}