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