Demo of layout add/remove transitions
Change-Id: Ib5f31bb0b6d16fa18cf10a426a25c7a8138f620a
diff --git a/samples/ApiDemos/AndroidManifest.xml b/samples/ApiDemos/AndroidManifest.xml
index ee47f78..78d2349 100644
--- a/samples/ApiDemos/AndroidManifest.xml
+++ b/samples/ApiDemos/AndroidManifest.xml
@@ -839,6 +839,14 @@
</intent-filter>
</activity>
+ <activity android:name=".animation.AnimationCloning"
+ android:label="Animation/Cloning">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.SAMPLE_CODE" />
+ </intent-filter>
+ </activity>
+
<activity android:name=".animation.AnimationSeeking" android:label="Animation/Seeking">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -891,6 +899,14 @@
</intent-filter>
</activity>
+ <activity android:name=".animation.LayoutAnimations"
+ android:label="Animation/Layout Animations">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.SAMPLE_CODE" />
+ </intent-filter>
+ </activity>
+
<!-- ************************************* -->
<!-- ANIMATION PACKAGE SAMPLES -->
<!-- ************************************* -->
diff --git a/samples/ApiDemos/res/layout/animation_cloning.xml b/samples/ApiDemos/res/layout/animation_cloning.xml
new file mode 100644
index 0000000..f49c5b0
--- /dev/null
+++ b/samples/ApiDemos/res/layout/animation_cloning.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:id="@+id/container"
+ >
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Run"
+ android:id="@+id/startButton"
+ />
+</LinearLayout>
diff --git a/samples/ApiDemos/res/layout/layout_animations.xml b/samples/ApiDemos/res/layout/layout_animations.xml
new file mode 100644
index 0000000..5c1a6f9
--- /dev/null
+++ b/samples/ApiDemos/res/layout/layout_animations.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/parent"
+ >
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ >
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Add Button"
+ android:id="@+id/addNewButton"
+ />
+ <CheckBox
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Custom Animations"
+ android:id="@+id/customAnimCB"
+ />
+ </LinearLayout>
+</LinearLayout>
diff --git a/samples/ApiDemos/src/com/example/android/apis/animation/AnimationCloning.java b/samples/ApiDemos/src/com/example/android/apis/animation/AnimationCloning.java
new file mode 100644
index 0000000..9c5fc36
--- /dev/null
+++ b/samples/ApiDemos/src/com/example/android/apis/animation/AnimationCloning.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2010 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.apis.animation;
+
+// Need the following import to get access to the app resources, since this
+// class is in a sub-package.
+import android.widget.Button;
+import com.example.android.apis.R;
+
+import android.animation.*;
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.RadialGradient;
+import android.graphics.Shader;
+import android.graphics.drawable.ShapeDrawable;
+import android.graphics.drawable.shapes.OvalShape;
+import android.graphics.drawable.shapes.RectShape;
+import android.os.Bundle;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.animation.AccelerateInterpolator;
+import android.view.animation.DecelerateInterpolator;
+import android.widget.LinearLayout;
+
+import java.util.ArrayList;
+
+
+public class AnimationCloning extends Activity {
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.animation_cloning);
+ LinearLayout container = (LinearLayout) findViewById(R.id.container);
+ final MyAnimationView animView = new MyAnimationView(this);
+ container.addView(animView);
+
+ Button starter = (Button) findViewById(R.id.startButton);
+ starter.setOnClickListener(new View.OnClickListener() {
+
+ public void onClick(View v) {
+ animView.startAnimation();
+ }
+ });
+ }
+
+ public class MyAnimationView extends View implements Animator.AnimatorUpdateListener {
+
+ public final ArrayList<ShapeHolder> balls = new ArrayList<ShapeHolder>();
+ Sequencer animation = null;
+ private float mDensity;
+
+ public MyAnimationView(Context context) {
+ super(context);
+
+ mDensity = getContext().getResources().getDisplayMetrics().density;
+
+ ShapeHolder ball0 = addBall(50f, 25f);
+ ShapeHolder ball1 = addBall(150f, 25f);
+ ShapeHolder ball2 = addBall(250f, 25f);
+ ShapeHolder ball3 = addBall(350f, 25f);
+
+
+ }
+
+ private void createAnimation() {
+ if (animation == null) {
+ PropertyAnimator anim1 = new PropertyAnimator(500, balls.get(0), "y",
+ 0f, getHeight() - balls.get(0).getHeight());
+ PropertyAnimator anim2 = anim1.clone();
+ anim2.setTarget(balls.get(1));
+ anim1.addUpdateListener(this);
+
+ ShapeHolder ball2 = balls.get(2);
+ PropertyAnimator animDown = new PropertyAnimator(500, ball2, "y",
+ 0f, getHeight() - ball2.getHeight());
+ animDown.setInterpolator(new AccelerateInterpolator());
+ PropertyAnimator animUp = new PropertyAnimator(500, ball2, "y",
+ getHeight() - ball2.getHeight(), 0f);
+ animDown.setInterpolator(new DecelerateInterpolator());
+ Sequencer s1 = new Sequencer();
+ s1.playSequentially(animDown, animUp);
+ animDown.addUpdateListener(this);
+ animUp.addUpdateListener(this);
+ Sequencer s2 = (Sequencer) s1.clone();
+ s2.setTarget(balls.get(3));
+
+ animation = new Sequencer();
+ animation.playTogether(anim1, anim2, s1);
+ animation.playSequentially(s1, s2);
+ }
+ }
+
+ private ShapeHolder addBall(float x, float y) {
+ OvalShape circle = new OvalShape();
+ circle.resize(50f * mDensity, 50f * mDensity);
+ ShapeDrawable drawable = new ShapeDrawable(circle);
+ ShapeHolder shapeHolder = new ShapeHolder(drawable);
+ shapeHolder.setX(x - 25f);
+ shapeHolder.setY(y - 25f);
+ int red = (int)(100 + Math.random() * 155);
+ int green = (int)(100 + Math.random() * 155);
+ int blue = (int)(100 + Math.random() * 155);
+ int color = 0xff000000 | red << 16 | green << 8 | blue;
+ Paint paint = drawable.getPaint(); //new Paint(Paint.ANTI_ALIAS_FLAG);
+ int darkColor = 0xff000000 | red/4 << 16 | green/4 << 8 | blue/4;
+ RadialGradient gradient = new RadialGradient(37.5f, 12.5f,
+ 50f, color, darkColor, Shader.TileMode.CLAMP);
+ paint.setShader(gradient);
+ shapeHolder.setPaint(paint);
+ balls.add(shapeHolder);
+ return shapeHolder;
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ for (int i = 0; i < balls.size(); ++i) {
+ ShapeHolder shapeHolder = balls.get(i);
+ canvas.save();
+ canvas.translate(shapeHolder.getX(), shapeHolder.getY());
+ shapeHolder.getShape().draw(canvas);
+ canvas.restore();
+ }
+ }
+
+ public void startAnimation() {
+ createAnimation();
+ animation.start();
+ }
+
+ public void onAnimationUpdate(Animator animation) {
+ invalidate();
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/samples/ApiDemos/src/com/example/android/apis/animation/AnimatorEvents.java b/samples/ApiDemos/src/com/example/android/apis/animation/AnimatorEvents.java
index f10db16..c7884bc 100644
--- a/samples/ApiDemos/src/com/example/android/apis/animation/AnimatorEvents.java
+++ b/samples/ApiDemos/src/com/example/android/apis/animation/AnimatorEvents.java
@@ -122,20 +122,26 @@
if (animation == null) {
PropertyAnimator yAnim = new PropertyAnimator(1500, ball, "y",
ball.getY(), getHeight() - 50f);
- yAnim.setRepeatCount(1);
+ yAnim.setRepeatCount(0);
yAnim.setRepeatMode(Animator.REVERSE);
yAnim.setInterpolator(new AccelerateInterpolator(2f));
yAnim.addUpdateListener(this);
yAnim.addListener(this);
- PropertyAnimator xAnim = new PropertyAnimator(1500, ball, "x",
+ PropertyAnimator xAnim = new PropertyAnimator(1000, ball, "x",
ball.getX(), ball.getX() + 300);
- xAnim.setRepeatCount(1);
+ xAnim.setStartDelay(0);
+ xAnim.setRepeatCount(0);
xAnim.setRepeatMode(Animator.REVERSE);
xAnim.setInterpolator(new AccelerateInterpolator(2f));
+ PropertyAnimator alphaAnim = new PropertyAnimator(1000, ball, "alpha", 1f, .5f);
+ Sequencer alphaSeq = new Sequencer();
+ alphaSeq.play(alphaAnim);
+
animation = new Sequencer();
((Sequencer) animation).playTogether(yAnim, xAnim);
+ //((Sequencer) animation).play(alphaSeq).after(500);
animation.addListener(this);
}
}
diff --git a/samples/ApiDemos/src/com/example/android/apis/animation/FixedGridLayout.java b/samples/ApiDemos/src/com/example/android/apis/animation/FixedGridLayout.java
new file mode 100644
index 0000000..75c5580
--- /dev/null
+++ b/samples/ApiDemos/src/com/example/android/apis/animation/FixedGridLayout.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2009 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.apis.animation;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * A layout that arranges its children in a grid. The size of the
+ * cells is set by the {@link #setCellSize} method and the
+ * android:cell_width and android:cell_height attributes in XML.
+ * The number of rows and columns is determined at runtime. Each
+ * cell contains exactly one view, and they flow in the natural
+ * child order (the order in which they were added, or the index
+ * in {@link #addViewAt}. Views can not span multiple cells.
+ *
+ * <p>This class was copied from the FixedGridLayout Api demo; see that demo for
+ * more information on using the layout.</p>
+ */
+public class FixedGridLayout extends ViewGroup {
+ int mCellWidth;
+ int mCellHeight;
+
+ public FixedGridLayout(Context context) {
+ super(context);
+ }
+
+ public void setCellWidth(int px) {
+ mCellWidth = px;
+ requestLayout();
+ }
+
+ public void setCellHeight(int px) {
+ mCellHeight = px;
+ requestLayout();
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ int cellWidthSpec = MeasureSpec.makeMeasureSpec(mCellWidth,
+ MeasureSpec.AT_MOST);
+ int cellHeightSpec = MeasureSpec.makeMeasureSpec(mCellHeight,
+ MeasureSpec.AT_MOST);
+
+ int count = getChildCount();
+ for (int index=0; index<count; index++) {
+ final View child = getChildAt(index);
+ child.measure(cellWidthSpec, cellHeightSpec);
+ }
+ // Use the size our parents gave us
+ setMeasuredDimension(resolveSize(mCellWidth*count, widthMeasureSpec),
+ resolveSize(mCellHeight*count, heightMeasureSpec));
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ int cellWidth = mCellWidth;
+ int cellHeight = mCellHeight;
+ int columns = (r - l) / cellWidth;
+ if (columns < 0) {
+ columns = 1;
+ }
+ int x = 0;
+ int y = 0;
+ int i = 0;
+ int count = getChildCount();
+ for (int index=0; index<count; index++) {
+ final View child = getChildAt(index);
+
+ int w = child.getMeasuredWidth();
+ int h = child.getMeasuredHeight();
+
+ int left = x + ((cellWidth-w)/2);
+ int top = y + ((cellHeight-h)/2);
+
+ child.layout(left, top, left+w, top+h);
+ if (i >= (columns-1)) {
+ // advance to next row
+ i = 0;
+ x = 0;
+ y += cellHeight;
+ } else {
+ i++;
+ x += cellWidth;
+ }
+ }
+ }
+}
+
diff --git a/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimations.java b/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimations.java
new file mode 100644
index 0000000..382a407
--- /dev/null
+++ b/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimations.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2010 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.apis.animation;
+
+// Need the following import to get access to the app resources, since this
+// class is in a sub-package.
+import com.example.android.apis.R;
+
+import android.animation.Animatable;
+import android.animation.AnimatableListenerAdapter;
+import android.animation.Keyframe;
+import android.animation.LayoutTransition;
+import android.animation.PropertyAnimator;
+import android.animation.PropertyValuesHolder;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.widget.Button;
+
+/**
+ * This application demonstrates the seeking capability of Animator. The SeekBar in the
+ * UI allows you to set the position of the animation. Pressing the Run button will play from
+ * the current position of the animation.
+ */
+public class LayoutAnimations extends Activity {
+
+ private int numButtons = 1;
+ ViewGroup container = null;
+
+ /** Called when the activity is first created. */
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.layout_animations);
+
+ container = new FixedGridLayout(this.getApplicationContext());
+ ((FixedGridLayout)container).setCellHeight(50);
+ ((FixedGridLayout)container).setCellWidth(100);
+ final LayoutTransition transitioner = new LayoutTransition();
+ container.setLayoutTransition(transitioner);
+
+ ViewGroup parent = (ViewGroup) findViewById(R.id.parent);
+ parent.addView(container);
+ Button addButton = (Button) findViewById(R.id.addNewButton);
+ addButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ Button newButton = new Button(getApplicationContext());
+ newButton.setText("Click To Remove " + (numButtons++));
+ newButton.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ container.removeView(v);
+ }
+ });
+ container.addView(newButton, Math.min(1, container.getChildCount()));
+ }
+ });
+
+ CheckBox customAnimCB = (CheckBox) findViewById(R.id.customAnimCB);
+ customAnimCB.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ long duration;
+ if (isChecked) {
+ transitioner.setStagger(LayoutTransition.CHANGE_APPEARING, 30);
+ transitioner.setStagger(LayoutTransition.CHANGE_DISAPPEARING, 30);
+ setupAnimations(transitioner);
+ duration = 500;
+ } else {
+ transitioner.setStagger(LayoutTransition.CHANGE_APPEARING, 0);
+ transitioner.setStagger(LayoutTransition.CHANGE_DISAPPEARING, 0);
+ transitioner.setAnimatable(LayoutTransition.APPEARING, null);
+ transitioner.setAnimatable(LayoutTransition.DISAPPEARING, null);
+ transitioner.setAnimatable(LayoutTransition.CHANGE_APPEARING, null);
+ transitioner.setAnimatable(LayoutTransition.CHANGE_DISAPPEARING, null);
+ duration = 300;
+ }
+ transitioner.setDuration(duration);
+ }
+ });
+ }
+
+ private void setupAnimations(LayoutTransition transition) {
+ // Changing while Adding
+ PropertyValuesHolder<Integer> pvhLeft =
+ new PropertyValuesHolder<Integer>("left", 0, 1);
+ PropertyValuesHolder<Integer> pvhTop =
+ new PropertyValuesHolder<Integer>("top", 0, 1);
+ PropertyValuesHolder<Integer> pvhRight =
+ new PropertyValuesHolder<Integer>("right", 0, 1);
+ PropertyValuesHolder<Integer> pvhBottom =
+ new PropertyValuesHolder<Integer>("bottom", 0, 1);
+ PropertyValuesHolder<Float> pvhScaleX =
+ new PropertyValuesHolder<Float>("scaleX", 1f, 0f, 1f);
+ PropertyValuesHolder<Float> pvhScaleY =
+ new PropertyValuesHolder<Float>("scaleY", 1f, 0f, 1f);
+ final PropertyAnimator changeIn =
+ new PropertyAnimator(transition.getDuration(LayoutTransition.CHANGE_APPEARING),
+ this, pvhLeft, pvhTop, pvhRight, pvhBottom, pvhScaleX, pvhScaleY);
+ transition.setAnimatable(LayoutTransition.CHANGE_APPEARING, changeIn);
+ changeIn.addListener(new AnimatableListenerAdapter() {
+ public void onAnimationEnd(Animatable anim) {
+ View view = (View) ((PropertyAnimator) anim).getTarget();
+ view.setScaleX(1f);
+ view.setScaleY(1f);
+ }
+ });
+
+ // Changing while Removing
+ Keyframe kf0 = new Keyframe(0f, 0f);
+ Keyframe kf1 = new Keyframe(.9999f, 360f);
+ Keyframe kf2 = new Keyframe(1f, 0f);
+ PropertyValuesHolder<Keyframe> pvhRotation =
+ new PropertyValuesHolder<Keyframe>("rotation", kf0, kf1, kf2);
+ final PropertyAnimator changeOut =
+ new PropertyAnimator(transition.getDuration(LayoutTransition.CHANGE_DISAPPEARING),
+ this, pvhLeft, pvhTop, pvhRight, pvhBottom, pvhRotation);
+ transition.setAnimatable(LayoutTransition.CHANGE_DISAPPEARING, changeOut);
+ changeOut.addListener(new AnimatableListenerAdapter() {
+ public void onAnimationEnd(Animatable anim) {
+ View view = (View) ((PropertyAnimator) anim).getTarget();
+ view.setRotation(0f);
+ }
+ });
+
+ // Adding
+ PropertyAnimator<Float> animIn =
+ new PropertyAnimator<Float>(transition.getDuration(LayoutTransition.APPEARING),
+ null, "rotationY", 90f, 0f);
+ transition.setAnimatable(LayoutTransition.APPEARING, animIn);
+ animIn.addListener(new AnimatableListenerAdapter() {
+ public void onAnimationEnd(Animatable anim) {
+ View view = (View) ((PropertyAnimator) anim).getTarget();
+ view.setRotationY(0f);
+ }
+ });
+
+ // Removing
+ PropertyAnimator<Float> animOut =
+ new PropertyAnimator<Float>(transition.getDuration(LayoutTransition.DISAPPEARING),
+ null, "rotationX", 0f, 90f);
+ transition.setAnimatable(LayoutTransition.DISAPPEARING, animOut);
+ animIn.addListener(new AnimatableListenerAdapter() {
+ public void onAnimationEnd(Animatable anim) {
+ View view = (View) ((PropertyAnimator) anim).getTarget();
+ view.setRotationX(0f);
+ }
+ });
+
+ }
+}
\ No newline at end of file
diff --git a/samples/ApiDemos/src/com/example/android/apis/animation/MultiPropertyAnimation.java b/samples/ApiDemos/src/com/example/android/apis/animation/MultiPropertyAnimation.java
index df1cb0b..39ea648 100644
--- a/samples/ApiDemos/src/com/example/android/apis/animation/MultiPropertyAnimation.java
+++ b/samples/ApiDemos/src/com/example/android/apis/animation/MultiPropertyAnimation.java
@@ -52,7 +52,7 @@
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.animation_seeking);
+ setContentView(R.layout.animation_multi_property);
LinearLayout container = (LinearLayout) findViewById(R.id.container);
final MyAnimationView animView = new MyAnimationView(this);
container.addView(animView);
diff --git a/samples/ApiDemos/src/com/example/android/apis/animation/ShapeHolder.java b/samples/ApiDemos/src/com/example/android/apis/animation/ShapeHolder.java
index 24a560c..22f88d3 100644
--- a/samples/ApiDemos/src/com/example/android/apis/animation/ShapeHolder.java
+++ b/samples/ApiDemos/src/com/example/android/apis/animation/ShapeHolder.java
@@ -78,11 +78,9 @@
}
public float getWidth() {
- //return shape.getIntrinsicWidth();
return shape.getShape().getWidth();
}
public void setWidth(float width) {
- //shape.setIntrinsicWidth(width);
Shape s = shape.getShape();
s.resize(width, s.getHeight());
}
@@ -93,7 +91,6 @@
public void setHeight(float height) {
Shape s = shape.getShape();
s.resize(s.getWidth(), height);
- //shape.setIntrinsicHeight(height);
}
public ShapeHolder(ShapeDrawable s) {