API aracılığıyla bunu yapmanın kolay bir yolu yok gibi görünüyor, çünkü animasyon sadece görünümün gerçek boyutunu değil, görünümün işleme matrisini değiştiriyor. Ancak LinearLayout'u görünümün küçüldüğünü düşünmeye ikna etmek için negatif bir marj belirleyebiliriz.
Bu nedenle, ScaleAnimation'a dayalı olarak kendi Animation sınıfınızı oluşturmanızı ve yeni kenar boşlukları ayarlamak ve düzeni güncellemek için "applyTransformation" yöntemini geçersiz kılmanızı öneririm. Bunun gibi...
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);
}
}
}
}
Genel uyarı geçerlidir: Korumalı bir yöntemi (applyTransformation) geçersiz kıldığımız için, bunun Android'in gelecekteki sürümlerinde çalışacağı garanti edilmez.