• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2013 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 package com.android.transitiontests;
17 
18 import android.app.Activity;
19 import android.content.Context;
20 import android.graphics.Canvas;
21 import android.graphics.Color;
22 import android.graphics.SurfaceTexture;
23 import android.os.Bundle;
24 import android.util.AttributeSet;
25 import android.view.SurfaceHolder;
26 import android.view.SurfaceView;
27 import android.view.TextureView;
28 import android.view.View;
29 import android.view.ViewGroup;
30 import android.transition.Crossfade;
31 import android.transition.ChangeBounds;
32 import android.transition.Scene;
33 import android.transition.TransitionSet;
34 import android.transition.TransitionManager;
35 import android.widget.Button;
36 
37 import static android.widget.LinearLayout.LayoutParams;
38 
39 public class SurfaceAndTextureViews extends Activity {
40 
41     SimpleView mView;
42     SimpleSurfaceView mSurfaceView;
43     SimpleTextureView mTextureView;
44     private static final int SMALL_SIZE = 200;
45 
46     @Override
onCreate(Bundle savedInstanceState)47     public void onCreate(Bundle savedInstanceState) {
48         super.onCreate(savedInstanceState);
49         setContentView(R.layout.surface_texture_views);
50 
51         final ViewGroup container = findViewById(R.id.container);
52         Button toggleButton = findViewById(R.id.toggleButton);
53 
54         mView = new SimpleView(this);
55         mView.setId(0);
56         mView.setLayoutParams(new LayoutParams(SMALL_SIZE, SMALL_SIZE));
57         container.addView(mView);
58 
59         mSurfaceView = new SimpleSurfaceView(this);
60         mSurfaceView.setId(1);
61         mSurfaceView.setLayoutParams(new LayoutParams(SMALL_SIZE, SMALL_SIZE));
62         container.addView(mSurfaceView);
63 
64         mTextureView = new SimpleTextureView(this);
65         mTextureView.setId(2);
66         mTextureView.setLayoutParams(new LayoutParams(SMALL_SIZE, SMALL_SIZE));
67         container.addView(mTextureView);
68 
69         final TransitionSet transition = new TransitionSet();
70         transition.addTransition(new ChangeBounds()).addTransition(new Crossfade().addTarget(0).
71                 addTarget(1).addTarget(2));
72 
73         toggleButton.setOnClickListener(new View.OnClickListener() {
74             @Override
75             public void onClick(View v) {
76                 Scene newScene = new Scene(container);
77                 newScene.setEnterAction(new Runnable() {
78                     @Override
79                     public void run() {
80                         if (mView.getWidth() <= SMALL_SIZE) {
81                             mView.setLayoutParams(new LayoutParams(SMALL_SIZE * 2, SMALL_SIZE));
82                             mSurfaceView.setLayoutParams(new LayoutParams(SMALL_SIZE * 2, SMALL_SIZE));
83                             mTextureView.setLayoutParams(new LayoutParams(SMALL_SIZE * 2, SMALL_SIZE));
84                             mView.mColor = SimpleView.LARGE_COLOR;
85                             mSurfaceView.mColor = SimpleSurfaceView.LARGE_COLOR;
86                             mTextureView.mColor = SimpleTextureView.LARGE_COLOR;
87                         } else {
88                             mView.setLayoutParams(new LayoutParams(SMALL_SIZE, SMALL_SIZE));
89                             mSurfaceView.setLayoutParams(new LayoutParams(SMALL_SIZE, SMALL_SIZE));
90                             mTextureView.setLayoutParams(new LayoutParams(SMALL_SIZE, SMALL_SIZE));
91                             mView.mColor = SimpleView.SMALL_COLOR;
92                             mSurfaceView.mColor = SimpleSurfaceView.SMALL_COLOR;
93                             mTextureView.mColor = SimpleTextureView.SMALL_COLOR;
94                         }
95                     }
96                 });
97                 TransitionManager.go(newScene, transition);
98             }
99         });
100 
101     }
102 
103     static private class SimpleView extends View {
104         static final int SMALL_COLOR = Color.BLUE;
105         static final int LARGE_COLOR = Color.YELLOW;
106         int mColor = SMALL_COLOR;
107 
SimpleView(Context context)108         private SimpleView(Context context) {
109             super(context);
110         }
111 
112         @Override
onDraw(Canvas canvas)113         protected void onDraw(Canvas canvas) {
114             canvas.drawColor(mColor);
115         }
116     }
117 
118     static private class SimpleSurfaceView extends SurfaceView implements SurfaceHolder.Callback {
119 
120         static final int SMALL_COLOR = Color.GREEN;
121         static final int LARGE_COLOR = Color.GRAY;
122         int mColor = SMALL_COLOR;
123         SurfaceHolder mHolder = null;
124 
SimpleSurfaceView(Context context)125         private SimpleSurfaceView(Context context) {
126             super(context);
127             SurfaceHolder holder = getHolder();
128             holder.addCallback(this);
129         }
130 
131 
132         @Override
surfaceCreated(SurfaceHolder holder)133         public void surfaceCreated(SurfaceHolder holder) {
134             System.out.println("surfaceCreated");
135         }
136 
137         @Override
surfaceChanged(SurfaceHolder holder, int format, int width, int height)138         public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
139             System.out.println("surfaceChanged: w h = " + width + ", " + height);
140             Canvas canvas = holder.lockCanvas();
141             canvas.drawColor(mColor);
142             holder.unlockCanvasAndPost(canvas);
143         }
144 
145         @Override
surfaceDestroyed(SurfaceHolder holder)146         public void surfaceDestroyed(SurfaceHolder holder) {
147             System.out.println("surfaceDestroyed");
148         }
149     }
150 
151     static private class SimpleTextureView extends TextureView implements TextureView.SurfaceTextureListener {
152 
153         static final int SMALL_COLOR = Color.RED;
154         static final int LARGE_COLOR = Color.CYAN;
155         int mColor = SMALL_COLOR;
156 
SimpleTextureView(Context context)157         private SimpleTextureView(Context context) {
158             super(context);
159             setSurfaceTextureListener(this);
160         }
161 
SimpleTextureView(Context context, AttributeSet attrs)162         private SimpleTextureView(Context context, AttributeSet attrs) {
163             super(context, attrs);
164             setSurfaceTextureListener(this);
165         }
166 
SimpleTextureView(Context context, AttributeSet attrs, int defStyle)167         private SimpleTextureView(Context context, AttributeSet attrs, int defStyle) {
168             super(context, attrs, defStyle);
169             setSurfaceTextureListener(this);
170         }
171 
172         @Override
onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height)173         public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
174             System.out.println("SurfaceTexture available");
175         }
176 
177         @Override
onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height)178         public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
179             System.out.println("SurfaceTexture size changed to " + width + ", " + height);
180             Canvas canvas = lockCanvas();
181             canvas.drawColor(mColor);
182             unlockCanvasAndPost(canvas);
183         }
184 
185         @Override
onSurfaceTextureDestroyed(SurfaceTexture surface)186         public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
187             return false;
188         }
189 
190         @Override
onSurfaceTextureUpdated(SurfaceTexture surface)191         public void onSurfaceTextureUpdated(SurfaceTexture surface) {
192             System.out.println("SurfaceTexture updated");
193         }
194     }
195 }
196