19420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase/* 29420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase * Copyright (C) 2012 The Android Open Source Project 39420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase * 49420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase * Licensed under the Apache License, Version 2.0 (the "License"); 59420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase * you may not use this file except in compliance with the License. 69420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase * You may obtain a copy of the License at 79420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase * 89420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase * http://www.apache.org/licenses/LICENSE-2.0 99420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase * 109420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase * Unless required by applicable law or agreed to in writing, software 119420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase * distributed under the License is distributed on an "AS IS" BASIS, 129420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase * See the License for the specific language governing permissions and 149420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase * limitations under the License. 159420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase */ 169420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haasepackage com.android.test.hwui; 179420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 189420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.animation.ObjectAnimator; 199420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.animation.ValueAnimator; 209420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.app.Activity; 219420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.content.Context; 229420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.os.Bundle; 239420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.util.AttributeSet; 249420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.view.View; 259420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.view.animation.AlphaAnimation; 269420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.view.animation.Animation; 279420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.view.animation.Transformation; 289420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.view.animation.TranslateAnimation; 299420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.widget.Button; 309420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.widget.CheckBox; 319420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.widget.CompoundButton; 329420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haaseimport android.widget.LinearLayout; 339420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 349420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haasepublic class TransformsAndAnimationsActivity extends Activity { 359420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase Button button1; 369420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase Button button2; 379420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase Button button3; 389420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase Button button1a; 399420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase Button button2a; 409420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase Button button3a; 419420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase Button button1b; 429420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase Button button2b; 439420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase Button button3b; 449420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase Button button4; 459420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase Button button5; 469420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase Button button6; 479420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase Button button7; 489420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase Button button8; 499420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase CheckBox layersNoneCB; 509420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase CheckBox layersHardwareCB; 519420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase CheckBox layersSoftwareCB; 529420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 539420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase @Override 549420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase protected void onCreate(Bundle savedInstanceState) { 559420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase super.onCreate(savedInstanceState); 569420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase setContentView(R.layout.transforms_and_animations); 579420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 589420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button1 = (Button) findViewById(R.id.button1); 599420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button2 = (Button) findViewById(R.id.button2); 609420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button3 = (Button) findViewById(R.id.button3); 619420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button1a = (Button) findViewById(R.id.button1a); 629420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button2a = (Button) findViewById(R.id.button2a); 639420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button3a = (Button) findViewById(R.id.button3a); 649420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button1b = (Button) findViewById(R.id.button1b); 659420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button2b = (Button) findViewById(R.id.button2b); 669420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button3b = (Button) findViewById(R.id.button3b); 679420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button4 = (Button) findViewById(R.id.button4); 689420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button5 = (Button) findViewById(R.id.button5); 699420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button6 = (Button) findViewById(R.id.button6); 709420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button7 = (Button) findViewById(R.id.button7); 719420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button8 = (Button) findViewById(R.id.button8); 729420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase layersNoneCB = (CheckBox) findViewById(R.id.layersNoneCB); 739420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase layersHardwareCB = (CheckBox) findViewById(R.id.layersHwCB); 749420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase layersSoftwareCB = (CheckBox) findViewById(R.id.layersSwCB); 759420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 769420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase layersNoneCB.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() { 779420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase @Override 789420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 799420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase if (isChecked) { 809420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase setLayerType(View.LAYER_TYPE_NONE); 819420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase layersHardwareCB.setChecked(false); 829420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase layersSoftwareCB.setChecked(false); 839420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 849420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 859420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase }); 869420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 879420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase layersSoftwareCB.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() { 889420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase @Override 899420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 909420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase if (isChecked) { 919420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase setLayerType(View.LAYER_TYPE_SOFTWARE); 929420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase layersHardwareCB.setChecked(false); 939420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase layersNoneCB.setChecked(false); 949420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 959420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 969420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase }); 979420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 989420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase layersHardwareCB.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() { 999420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase @Override 1009420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 1019420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase if (isChecked) { 1029420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase setLayerType(View.LAYER_TYPE_HARDWARE); 1039420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase layersNoneCB.setChecked(false); 1049420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase layersSoftwareCB.setChecked(false); 1059420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 1069420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 1079420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase }); 1089420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1099420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button1a.setAlpha(.5f); 1109420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button2a.setAlpha(.5f); 1119420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button3a.setAlpha(.5f); 1129420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button3.setTranslationX(50); 1139420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button7.setTranslationX(50); 1149420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button8.setTranslationX(50); 1159420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1169420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase final AlphaAnimation alphaAnim = new AlphaAnimation(1, 0); 1179420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase alphaAnim.setDuration(1000); 1189420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase alphaAnim.setRepeatCount(Animation.INFINITE); 1199420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase alphaAnim.setRepeatMode(Animation.REVERSE); 1209420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1219420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase final TranslateAnimation transAnim = new TranslateAnimation(0, -50, 0, 0); 1229420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase transAnim.setDuration(1000); 1239420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase transAnim.setRepeatCount(Animation.INFINITE); 1249420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase transAnim.setRepeatMode(Animation.REVERSE); 1259420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1269420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase getWindow().getDecorView().postDelayed(new Runnable() { 1279420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase @Override 1289420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase public void run() { 1299420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button1.startAnimation(alphaAnim); 1309420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button2.startAnimation(alphaAnim); 1319420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button3.startAnimation(alphaAnim); 1329420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1339420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button1a.startAnimation(alphaAnim); 1349420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button2a.startAnimation(alphaAnim); 1359420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button3a.startAnimation(alphaAnim); 1369420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1379420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button1b.startAnimation(alphaAnim); 1389420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button2b.startAnimation(alphaAnim); 1399420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button3b.startAnimation(alphaAnim); 1409420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase startAnimator(button1b); 1419420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase startAnimator(button2b); 1429420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase startAnimator(button3b); 1439420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1449420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button7.startAnimation(transAnim); 1459420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button8.startAnimation(transAnim); 1469420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 1479420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase }, 2000); 1489420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 1499420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1509420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase private void setLayerType(int layerType) { 1519420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button1.setLayerType(layerType, null); 1529420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button2.setLayerType(layerType, null); 1539420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button3.setLayerType(layerType, null); 1549420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button1a.setLayerType(layerType, null); 1559420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button2a.setLayerType(layerType, null); 1569420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button3a.setLayerType(layerType, null); 1579420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button1b.setLayerType(layerType, null); 1589420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button2b.setLayerType(layerType, null); 1599420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button3b.setLayerType(layerType, null); 1609420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button4.setLayerType(layerType, null); 1619420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button5.setLayerType(layerType, null); 1629420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button6.setLayerType(layerType, null); 1639420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button7.setLayerType(layerType, null); 1649420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase button8.setLayerType(layerType, null); 1659420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 1669420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1679420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase private void startAnimator(View target) { 1689420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase ObjectAnimator anim1b = ObjectAnimator.ofFloat(target, View.ALPHA, 0); 1699420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase anim1b.setRepeatCount(ValueAnimator.INFINITE); 1709420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase anim1b.setRepeatMode(ValueAnimator.REVERSE); 1719420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase anim1b.setDuration(1000); 1729420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase anim1b.start(); 1739420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 1749420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1759420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase public static class MyLayout extends LinearLayout { 1769420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1779420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase public MyLayout(Context context) { 1789420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase super(context); 1799420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase setStaticTransformationsEnabled(true); 1809420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 1819420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1829420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase public MyLayout(Context context, AttributeSet attrs) { 1839420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase super(context, attrs); 1849420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase setStaticTransformationsEnabled(true); 1859420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 1869420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1879420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase public MyLayout(Context context, AttributeSet attrs, int defStyle) { 1889420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase super(context, attrs, defStyle); 1899420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase setStaticTransformationsEnabled(true); 1909420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 1919420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1929420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase @Override 1939420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase protected boolean getChildStaticTransformation(View child, Transformation t) { 1949420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase t.clear(); 1959420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase t.setAlpha(.35f); 1969420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 1979420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase return true; 1989420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 1999420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase } 2009420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase} 2019420abd56a2af7ddbeb70562b79d61b2dca8c5a1Chet Haase 202