| /* |
| * Copyright (C) 2013 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.example.android.layouttranschanging; |
| |
| import android.animation.LayoutTransition; |
| import android.app.Activity; |
| import android.content.Context; |
| import android.os.Bundle; |
| import android.view.View; |
| import android.view.ViewGroup; |
| import android.widget.Button; |
| import android.widget.LinearLayout; |
| import android.widget.LinearLayout.LayoutParams; |
| |
| /** |
| * This example shows how to use LayoutTransition to animate simple changes in a layout |
| * container. |
| * |
| * Watch the associated video for this demo on the DevBytes channel of developer.android.com |
| * or on YouTube at https://www.youtube.com/watch?v=55wLsaWpQ4g. |
| */ |
| public class LayoutTransChanging extends Activity { |
| |
| @Override |
| public void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| setContentView(R.layout.main); |
| |
| final Button addButton = |
| (Button) findViewById(R.id.addButton); |
| final Button removeButton = |
| (Button) findViewById(R.id.removeButton); |
| final LinearLayout container = |
| (LinearLayout) findViewById(R.id.container); |
| final Context context = this; |
| |
| // Start with two views |
| for (int i = 0; i < 2; ++i) { |
| container.addView(new ColoredView(this)); |
| } |
| |
| addButton.setOnClickListener(new View.OnClickListener() { |
| @Override |
| public void onClick(View v) { |
| // Adding a view will cause a LayoutTransition animation |
| container.addView(new ColoredView(context), 1); |
| } |
| }); |
| |
| removeButton.setOnClickListener(new View.OnClickListener() { |
| @Override |
| public void onClick(View v) { |
| if (container.getChildCount() > 0) { |
| // Removing a view will cause a LayoutTransition animation |
| container.removeViewAt(Math.min(1, container.getChildCount() - 1)); |
| } |
| } |
| }); |
| |
| // Note that this assumes a LayoutTransition is set on the container, which is the |
| // case here because the container has the attribute "animateLayoutChanges" set to true |
| // in the layout file. You can also call setLayoutTransition(new LayoutTransition()) in |
| // code to set a LayoutTransition on any container. |
| LayoutTransition transition = container.getLayoutTransition(); |
| |
| // New capability as of Jellybean; monitor the container for *all* layout changes |
| // (not just add/remove/visibility changes) and animate these changes as well. |
| transition.enableTransitionType(LayoutTransition.CHANGING); |
| } |
| |
| /** |
| * Custom view painted with a random background color and two different sizes which are |
| * toggled between due to user interaction. |
| */ |
| private static class ColoredView extends View { |
| |
| private boolean mExpanded = false; |
| |
| private LayoutParams mCompressedParams = new LayoutParams( |
| ViewGroup.LayoutParams.MATCH_PARENT, 50); |
| |
| private LayoutParams mExpandedParams = new LayoutParams( |
| ViewGroup.LayoutParams.MATCH_PARENT, 200); |
| |
| private ColoredView(Context context) { |
| super(context); |
| int red = (int)(Math.random() * 128 + 127); |
| int green = (int)(Math.random() * 128 + 127); |
| int blue = (int)(Math.random() * 128 + 127); |
| int color = 0xff << 24 | (red << 16) | |
| (green << 8) | blue; |
| setBackgroundColor(color); |
| setLayoutParams(mCompressedParams); |
| setOnClickListener(new OnClickListener() { |
| @Override |
| public void onClick(View v) { |
| // Size changes will cause a LayoutTransition animation if the CHANGING |
| // transition is enabled |
| setLayoutParams(mExpanded ? mCompressedParams : mExpandedParams); |
| mExpanded = !mExpanded; |
| requestLayout(); |
| } |
| }); |
| } |
| } |
| } |