-
-
Save luisinder/d2798f2273e5725e716f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
}); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment