1e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui/* 2e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * Copyright (C) 2014 The Android Open Source Project 3e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * 4e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 5e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * in compliance with the License. You may obtain a copy of the License at 6e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * 7e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * http://www.apache.org/licenses/LICENSE-2.0 8e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * 9e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * Unless required by applicable law or agreed to in writing, software distributed under the License 10e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 11e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * or implied. See the License for the specific language governing permissions and limitations under 12e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui * the License. 13e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui */ 14e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 15e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuipackage com.android.test.dynamic; 16e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 17e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuiimport android.app.Activity; 1883a52031fd5c277d0c6e75da50bf8013e8a70399ztenghuiimport android.graphics.drawable.Animatable2; 19e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuiimport android.graphics.drawable.AnimatedVectorDrawable; 2083a52031fd5c277d0c6e75da50bf8013e8a70399ztenghuiimport android.graphics.drawable.Drawable; 21e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuiimport android.os.Bundle; 221588f0ff54b88240b55eeaba97e67f0f1dee5f92ztenghuiimport android.util.Log; 23e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuiimport android.view.View; 24e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghuiimport android.widget.Button; 251c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghuiimport android.widget.GridLayout; 261c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghuiimport android.widget.ScrollView; 279ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhuimport android.widget.TextView; 28e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 295eb5cde467081d1af628e5463ba55f110265a86fztenghuipublic class AnimatedVectorDrawableTest extends Activity implements View.OnClickListener { 301c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui private static final String LOGCAT = "AnimatedVectorDrawableTest"; 311c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui 321c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui protected int[] icon = { 335339428d22fb477c79348fde7c1288a7b22e6113Teng-Hui Zhu R.drawable.btn_radio_on_to_off_bundle, 346eafdfcd1c704aa1914be8edacaa7512f528a75fztenghui R.drawable.ic_rotate_2_portrait_v2_animation, 356eafdfcd1c704aa1914be8edacaa7512f528a75fztenghui R.drawable.ic_signal_airplane_v2_animation, 366eafdfcd1c704aa1914be8edacaa7512f528a75fztenghui R.drawable.ic_hourglass_animation, 375eb5cde467081d1af628e5463ba55f110265a86fztenghui R.drawable.animation_vector_linear_progress_bar, 381c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui R.drawable.animation_vector_drawable_grouping_1, 391c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui R.drawable.animation_vector_progress_bar, 401c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui R.drawable.animation_vector_drawable_favorite, 411c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui R.drawable.animation_vector_drawable01, 428490354dc651dd8f25036ef0dda7917fb33013edztenghui // Duplicate to test constant state. 438490354dc651dd8f25036ef0dda7917fb33013edztenghui R.drawable.animation_vector_drawable01, 441c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui }; 45e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 46e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui @Override 47e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui protected void onCreate(Bundle savedInstanceState) { 4806a353d37c5dd72515136fef94a720b642f05f01Teng-Hui Zhu final int[] layerTypes = {View.LAYER_TYPE_SOFTWARE, View.LAYER_TYPE_HARDWARE}; 499ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu final boolean[] forceOnUi = {false, true}; 50e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui super.onCreate(savedInstanceState); 51e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui 521c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui ScrollView scrollView = new ScrollView(this); 531c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui GridLayout container = new GridLayout(this); 541c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui scrollView.addView(container); 559ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu container.setColumnCount(layerTypes.length * forceOnUi.length); 561c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui 579ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu for (int j = 0; j < layerTypes.length; j++) { 589ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu for (int k = 0; k < forceOnUi.length; k++) { 599ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu TextView textView = new TextView(this); 609ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu String category = "Layer:" 619ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu + (layerTypes[j] == View.LAYER_TYPE_SOFTWARE ? "SW" : "HW") 629ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu + (forceOnUi[k] == true ? ",forceUI" : ""); 639ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu textView.setText(category); 649ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu container.addView(textView); 659ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu } 669ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu } 671c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui for (int i = 0; i < icon.length; i++) { 6806a353d37c5dd72515136fef94a720b642f05f01Teng-Hui Zhu for (int j = 0; j < layerTypes.length; j++) { 699ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu for (int k = 0; k < forceOnUi.length; k++) { 709ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu Button button = new Button(this); 719ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu button.setWidth(300); 729ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu button.setHeight(300); 739ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu button.setLayerType(layerTypes[j], null); 749ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu button.setBackgroundResource(icon[i]); 759ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu AnimatedVectorDrawable d = (AnimatedVectorDrawable) button.getBackground(); 769ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu if (forceOnUi[k] == true) { 779ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu d.forceAnimationOnUI(); 7806a353d37c5dd72515136fef94a720b642f05f01Teng-Hui Zhu } 799ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu d.registerAnimationCallback(new Animatable2.AnimationCallback() { 809ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu @Override 819ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu public void onAnimationStart(Drawable drawable) { 829ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu Log.v(LOGCAT, "Animator start"); 839ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu } 8483a52031fd5c277d0c6e75da50bf8013e8a70399ztenghui 859ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu @Override 869ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu public void onAnimationEnd(Drawable drawable) { 879ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu Log.v(LOGCAT, "Animator end"); 889ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu } 899ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu }); 901588f0ff54b88240b55eeaba97e67f0f1dee5f92ztenghui 919ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu container.addView(button); 929ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu button.setOnClickListener(this); 939ac5a3333db48e169d2e89e1e9062ed943d20589Teng-Hui Zhu } 9406a353d37c5dd72515136fef94a720b642f05f01Teng-Hui Zhu } 951c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui } 961c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui 971c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui setContentView(scrollView); 981c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui } 991c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui 1001c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui @Override 1011c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui public void onClick(View v) { 1021c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui AnimatedVectorDrawable d = (AnimatedVectorDrawable) v.getBackground(); 1031c1cda0c31c4a581da7649d0df2e70f2ca77f49fztenghui d.start(); 104e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui } 105e5e92602a41a4ddc7b42cd1c171a0edfbd09b8daztenghui} 106