1d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy/* 2d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy * Copyright (C) 2010 The Android Open Source Project 3d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy * 4d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy * you may not use this file except in compliance with the License. 6d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy * You may obtain a copy of the License at 7d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy * 8d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 9d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy * 10d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy * Unless required by applicable law or agreed to in writing, software 11d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy * See the License for the specific language governing permissions and 14d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy * limitations under the License. 15d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy */ 16d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 17f607bdc167f66b3e7003acaa4736ae46d78c1492Romain Guypackage com.android.test.hwui; 18d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 19d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guyimport android.app.Activity; 20d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guyimport android.content.Context; 21d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guyimport android.graphics.Canvas; 22d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guyimport android.graphics.Paint; 23d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guyimport android.graphics.PorterDuff; 24d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guyimport android.graphics.PorterDuffXfermode; 25d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guyimport android.os.Bundle; 26d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guyimport android.view.View; 27d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 28d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy@SuppressWarnings({"UnusedDeclaration"}) 29d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guypublic class LayersActivity extends Activity { 30d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy @Override 31d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy protected void onCreate(Bundle savedInstanceState) { 32d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy super.onCreate(savedInstanceState); 33d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy setContentView(new LayersView(this)); 34d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy } 35d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 36d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet public static class LayersView extends View { 37d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy private Paint mLayerPaint; 38d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy private final Paint mRectPaint; 39d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 40d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet public LayersView(Context c) { 41d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy super(c); 42d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 43d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mLayerPaint = new Paint(); 44d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mRectPaint = new Paint(); 45d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy } 46d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 47d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy @Override 48d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy protected void onDraw(Canvas canvas) { 49d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy super.onDraw(canvas); 50d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet 51d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy canvas.translate(140.0f, 100.0f); 52d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 53d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy //canvas.drawRGB(255, 255, 255); 54d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet 55d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy int count = canvas.saveLayer(0.0f, 0.0f, 200.0f, 100.0f, mLayerPaint, 56d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy Canvas.ALL_SAVE_FLAG); 57d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 58d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mRectPaint.setColor(0xffff0000); 59d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy canvas.drawRect(0.0f, 0.0f, 200.0f, 100.0f, mRectPaint); 60d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 61d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy canvas.restoreToCount(count); 62d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet 63d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy canvas.translate(0.0f, 125.0f); 64d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet 65d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy count = canvas.saveLayer(0.0f, 0.0f, 200.0f, 100.0f, mLayerPaint, 66d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy Canvas.ALL_SAVE_FLAG); 67d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 68d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mRectPaint.setColor(0xff00ff00); 69d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mRectPaint.setAlpha(50); 70d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy canvas.drawRect(0.0f, 0.0f, 200.0f, 100.0f, mRectPaint); 71d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 72d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy canvas.restoreToCount(count); 73d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 74d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy canvas.translate(25.0f, 125.0f); 75d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 76d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mRectPaint.setColor(0xff0000ff); 77d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mRectPaint.setAlpha(255); 78d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet canvas.drawRect(0.0f, 0.0f, 100.0f, 50.0f, mRectPaint); 79d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet 80d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mLayerPaint.setAlpha(127); 81d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mLayerPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT)); 82d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy count = canvas.saveLayer(50.0f, 25.0f, 150.0f, 75.0f, mLayerPaint, 83d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy Canvas.ALL_SAVE_FLAG); 84d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 85d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mRectPaint.setColor(0xffff0000); 86d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy canvas.drawRect(50.0f, 25.0f, 150.0f, 75.0f, mRectPaint); 87d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 88d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy canvas.restoreToCount(count); 89d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet 90d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy canvas.translate(0.0f, 125.0f); 91d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 92d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mRectPaint.setColor(0xff0000ff); 93d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mRectPaint.setAlpha(255); 94d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet canvas.drawRect(0.0f, 0.0f, 100.0f, 50.0f, mRectPaint); 95d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet 96d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mLayerPaint.setColor(0xffff0000); 97d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mLayerPaint.setAlpha(127); 98d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mLayerPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP)); 99d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy count = canvas.saveLayer(50.0f, 25.0f, 150.0f, 75.0f, mLayerPaint, 100d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy Canvas.ALL_SAVE_FLAG); 101d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 102d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mRectPaint.setColor(0xffff0000); 103d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy canvas.drawRect(50.0f, 25.0f, 150.0f, 75.0f, mRectPaint); 104d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy 105d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy canvas.restoreToCount(count); 106d38e776a3cc8cb53945cbebafbe6f6c2e3501fa5Xavier Ducrohet 107d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy mLayerPaint = new Paint(); 108d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy } 109d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy } 110d55a86120dd1e8ebcc6906c9ffd463f7460348daRomain Guy} 111