• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
17 package com.android.test.hwui;
18 
19 import android.app.Activity;
20 import android.content.Context;
21 import android.graphics.Canvas;
22 import android.graphics.Paint;
23 import android.os.Bundle;
24 import android.util.Log;
25 import android.view.Gravity;
26 import android.view.View;
27 import android.view.animation.AlphaAnimation;
28 import android.view.animation.Animation;
29 import android.widget.FrameLayout;
30 
31 @SuppressWarnings({"UnusedDeclaration"})
32 public class AlphaLayersActivity extends Activity {
33     private static final String LOG_TAG = "HwUi";
34 
35     @Override
onCreate(Bundle savedInstanceState)36     protected void onCreate(Bundle savedInstanceState) {
37         super.onCreate(savedInstanceState);
38 
39         DirtyBitmapView container = new DirtyBitmapView(this);
40 
41         ColorView color = new ColorView(this);
42         container.addView(color, new DirtyBitmapView.LayoutParams(
43                 dipToPx(this, 100), dipToPx(this, 100), Gravity.CENTER));
44 
45         AlphaAnimation a = new AlphaAnimation(1.0f, 0.0f);
46         a.setDuration(2000);
47         a.setRepeatCount(Animation.INFINITE);
48         a.setRepeatMode(Animation.REVERSE);
49         color.startAnimation(a);
50 
51         setContentView(container);
52     }
53 
54     @SuppressWarnings({"UnusedDeclaration"})
dipToPx(Context c, int dip)55     static int dipToPx(Context c, int dip) {
56         return (int) (c.getResources().getDisplayMetrics().density * dip + 0.5f);
57     }
58 
59     static class ColorView extends View {
ColorView(Context c)60         ColorView(Context c) {
61             super(c);
62         }
63 
64         @Override
onDraw(Canvas canvas)65         protected void onDraw(Canvas canvas) {
66             super.onDraw(canvas);
67             canvas.drawRGB(0, 255, 0);
68         }
69     }
70 
71     static class DirtyBitmapView extends FrameLayout {
72         private final Paint mPaint;
73 
DirtyBitmapView(Context c)74         DirtyBitmapView(Context c) {
75             super(c);
76             mPaint = new Paint();
77         }
78 
79         @Override
dispatchDraw(Canvas canvas)80         public void dispatchDraw(Canvas canvas) {
81             canvas.drawRGB(255, 255, 255);
82 
83             mPaint.setColor(0xffff0000);
84             canvas.drawRect(200.0f, 0.0f, 220.0f, 20.0f, mPaint);
85 
86             canvas.save();
87             canvas.clipRect(20.0f, 0.0f, 40.0f, 20.0f);
88             Log.d(LOG_TAG, "clipRect = " + canvas.getClipBounds());
89             Log.d(LOG_TAG, "rejected = " + canvas.quickReject(100.0f, 100.0f, 110.0f, 110.0f,
90                     Canvas.EdgeType.BW));
91             Log.d(LOG_TAG, "rejected = " + canvas.quickReject(25.0f, 5.0f, 30.0f, 10.0f,
92                     Canvas.EdgeType.BW));
93             canvas.restore();
94 
95             canvas.save();
96             canvas.scale(2.0f, 2.0f);
97             canvas.clipRect(20.0f, 0.0f, 40.0f, 20.0f);
98             Log.d(LOG_TAG, "clipRect = " + canvas.getClipBounds());
99             Log.d(LOG_TAG, "rejected = " + canvas.quickReject(50.0f, 50.0f, 60.0f, 60.0f,
100                     Canvas.EdgeType.BW));
101             Log.d(LOG_TAG, "rejected = " + canvas.quickReject(25.0f, 5.0f, 30.0f, 10.0f,
102                     Canvas.EdgeType.BW));
103             canvas.restore();
104 
105             canvas.save();
106             canvas.translate(20.0f, 20.0f);
107             canvas.clipRect(20.0f, 0.0f, 40.0f, 20.0f);
108             Log.d(LOG_TAG, "clipRect = " + canvas.getClipBounds());
109             Log.d(LOG_TAG, "rejected = " + canvas.quickReject(80.0f, 80.0f, 90.0f, 90.0f,
110                     Canvas.EdgeType.BW));
111             Log.d(LOG_TAG, "rejected = " + canvas.quickReject(25.0f, 5.0f, 30.0f, 10.0f,
112                     Canvas.EdgeType.BW));
113             canvas.restore();
114 
115             canvas.save();
116             canvas.scale(2.0f, 2.0f);
117             canvas.clipRect(20.0f, 0.0f, 40.0f, 20.0f);
118 
119             mPaint.setColor(0xff00ff00);
120             canvas.drawRect(0.0f, 0.0f, 20.0f, 20.0f, mPaint);
121 
122             mPaint.setColor(0xff0000ff);
123             canvas.drawRect(20.0f, 0.0f, 40.0f, 20.0f, mPaint);
124 
125             canvas.restore();
126 
127             final int restoreTo = canvas.save();
128             canvas.saveLayerAlpha(0.0f, 100.0f, getWidth(), 150.0f, 127,
129                     Canvas.HAS_ALPHA_LAYER_SAVE_FLAG | Canvas.CLIP_TO_LAYER_SAVE_FLAG);
130             mPaint.setColor(0xff0000ff);
131             canvas.drawRect(0.0f, 100.0f, 40.0f, 150.0f, mPaint);
132             mPaint.setColor(0xff00ffff);
133             canvas.drawRect(40.0f, 100.0f, 140.0f, 150.0f, mPaint);
134             mPaint.setColor(0xffff00ff);
135             canvas.drawRect(140.0f, 100.0f, 240.0f, 150.0f, mPaint);
136             canvas.restoreToCount(restoreTo);
137 
138             super.dispatchDraw(canvas);
139         }
140     }
141 }
142