एपीआई के माध्यम से ऐसा करने का एक आसान तरीका नहीं लगता है, क्योंकि एनीमेशन सिर्फ दृश्य के रेंडर मैट्रिक्स को बदलता है, न कि वास्तविक आकार को। लेकिन हम लियरलेयआउट को मूर्ख बनाने के लिए एक नकारात्मक मार्जिन सेट कर सकते हैं, यह सोचकर कि दृश्य छोटा हो रहा है।
इसलिए मैं स्केलमैनिएशन के आधार पर अपना स्वयं का एनीमेशन वर्ग बनाने की सलाह दूंगा, और नए मार्जिन सेट करने और लेआउट को अपडेट करने के लिए "applyTransformation" विधि को ओवरराइड करूंगा। इस कदर...
public class Q2634073 extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.q2634073);
findViewById(R.id.item1).setOnClickListener(this);
}
@Override
public void onClick(View view) {
view.startAnimation(new MyScaler(1.0f, 1.0f, 1.0f, 0.0f, 500, view, true));
}
public class MyScaler extends ScaleAnimation {
private View mView;
private LayoutParams mLayoutParams;
private int mMarginBottomFromY, mMarginBottomToY;
private boolean mVanishAfter = false;
public MyScaler(float fromX, float toX, float fromY, float toY, int duration, View view,
boolean vanishAfter) {
super(fromX, toX, fromY, toY);
setDuration(duration);
mView = view;
mVanishAfter = vanishAfter;
mLayoutParams = (LayoutParams) view.getLayoutParams();
int height = mView.getHeight();
mMarginBottomFromY = (int) (height * fromY) + mLayoutParams.bottomMargin - height;
mMarginBottomToY = (int) (0 - ((height * toY) + mLayoutParams.bottomMargin)) - height;
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
super.applyTransformation(interpolatedTime, t);
if (interpolatedTime < 1.0f) {
int newMarginBottom = mMarginBottomFromY
+ (int) ((mMarginBottomToY - mMarginBottomFromY) * interpolatedTime);
mLayoutParams.setMargins(mLayoutParams.leftMargin, mLayoutParams.topMargin,
mLayoutParams.rightMargin, newMarginBottom);
mView.getParent().requestLayout();
} else if (mVanishAfter) {
mView.setVisibility(View.GONE);
}
}
}
}
सामान्य चेतावनी लागू होती है: क्योंकि हम एक संरक्षित पद्धति (एपट्रांसफॉर्मेशन) से आगे निकल रहे हैं, यह भविष्य के एंड्रॉइड के संस्करणों में काम करने की गारंटी नहीं है।