CirclePropActivity.java revision 91b5c658d958f5330f81a7a4d9692b036991473d
1/* 2 * Copyright (C) 2014 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 17package com.android.test.hwui; 18 19import android.animation.TimeInterpolator; 20import android.app.Activity; 21import android.content.Context; 22import android.graphics.Canvas; 23import android.graphics.CanvasProperty; 24import android.graphics.Paint; 25import android.graphics.Paint.Style; 26import android.os.Bundle; 27import android.os.Trace; 28import android.view.HardwareCanvas; 29import android.view.RenderNodeAnimator; 30import android.view.View; 31import android.view.animation.AccelerateDecelerateInterpolator; 32import android.view.animation.OvershootInterpolator; 33import android.webkit.WebChromeClient; 34import android.webkit.WebView; 35import android.webkit.WebViewClient; 36import android.widget.LinearLayout; 37import android.widget.LinearLayout.LayoutParams; 38import android.widget.ProgressBar; 39 40import java.util.ArrayList; 41 42public class CirclePropActivity extends Activity { 43 @Override 44 protected void onCreate(Bundle savedInstanceState) { 45 super.onCreate(savedInstanceState); 46 47 final LinearLayout layout = new LinearLayout(this); 48 layout.setOrientation(LinearLayout.VERTICAL); 49 50 ProgressBar spinner = new ProgressBar(this, null, android.R.attr.progressBarStyleLarge); 51 layout.addView(spinner, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 52 // For testing with a functor in the tree 53// WebView wv = new WebView(this); 54// wv.setWebViewClient(new WebViewClient()); 55// wv.setWebChromeClient(new WebChromeClient()); 56// wv.loadUrl("http://theverge.com"); 57// layout.addView(wv, new LayoutParams(LayoutParams.MATCH_PARENT, 100)); 58 59 layout.addView(new CircleView(this), 60 new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 61 62 setContentView(layout); 63 } 64 65 static class CircleView extends View { 66 static final int DURATION = 500; 67 68 private boolean mToggle = false; 69 ArrayList<RenderNodeAnimator> mRunningAnimations = new ArrayList<RenderNodeAnimator>(); 70 71 CanvasProperty<Float> mX; 72 CanvasProperty<Float> mY; 73 CanvasProperty<Float> mRadius; 74 CanvasProperty<Paint> mPaint; 75 76 CircleView(Context c) { 77 super(c); 78 setClickable(true); 79 80 mX = CanvasProperty.createFloat(200.0f); 81 mY = CanvasProperty.createFloat(200.0f); 82 mRadius = CanvasProperty.createFloat(150.0f); 83 84 Paint p = new Paint(); 85 p.setAntiAlias(true); 86 p.setColor(0xFFFF0000); 87 p.setStyle(Style.STROKE); 88 p.setStrokeWidth(60.0f); 89 mPaint = CanvasProperty.createPaint(p); 90 } 91 92 @Override 93 protected void onDraw(Canvas canvas) { 94 super.onDraw(canvas); 95 96 if (canvas.isHardwareAccelerated()) { 97 HardwareCanvas hwcanvas = (HardwareCanvas) canvas; 98 hwcanvas.drawCircle(mX, mY, mRadius, mPaint); 99 } 100 } 101 102 @Override 103 public boolean performClick() { 104 for (int i = 0; i < mRunningAnimations.size(); i++) { 105 mRunningAnimations.get(i).cancel(); 106 } 107 mRunningAnimations.clear(); 108 109 mToggle = !mToggle; 110 111 /* 112 mRunningAnimations.add(new RenderNodeAnimator( 113 mX, mToggle ? 400.0f : 200.0f)); 114 115 mRunningAnimations.add(new RenderNodeAnimator( 116 mY, mToggle ? 600.0f : 200.0f)); 117 118 mRunningAnimations.add(new RenderNodeAnimator( 119 mRadius, mToggle ? 250.0f : 150.0f)); 120 121 mRunningAnimations.add(new RenderNodeAnimator( 122 mPaint, RenderNodeAnimator.PAINT_ALPHA, 123 mToggle ? 64.0f : 255.0f)); 124 125 mRunningAnimations.add(new RenderNodeAnimator( 126 mPaint, RenderNodeAnimator.PAINT_STROKE_WIDTH, 127 mToggle ? 5.0f : 60.0f)); 128 129 TimeInterpolator interp = new OvershootInterpolator(3.0f); 130 for (int i = 0; i < mRunningAnimations.size(); i++) { 131 RenderNodeAnimator anim = mRunningAnimations.get(i); 132 anim.setInterpolator(interp); 133 anim.setDuration(1000); 134 anim.start(this); 135 } 136 137 if (mToggle) { 138 post(new Runnable() { 139 @Override 140 public void run() { 141 Trace.traceBegin(Trace.TRACE_TAG_VIEW, "pretendBusy"); 142 try { 143 Thread.sleep(DURATION); 144 } catch (InterruptedException e) { 145 } 146 Trace.traceEnd(Trace.TRACE_TAG_VIEW); 147 } 148 }); 149 } 150 */ 151 return true; 152 } 153 } 154} 155