Dường như không có cách nào dễ dàng để thực hiện điều này thông qua API, vì hoạt ảnh chỉ thay đổi ma trận kết xuất của chế độ xem, không phải kích thước thực. Nhưng chúng ta có thể đặt một biên âm để đánh lừa LinearLayout nghĩ rằng chế độ xem ngày càng nhỏ.
Vì vậy, tôi khuyên bạn nên tạo lớp Hoạt hình của riêng bạn, dựa trên ScaleAnimation và ghi đè phương thức "applyTransformation" để đặt lề mới và cập nhật bố cục. Như thế này...
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);
}
}
}
}
Cảnh báo thông thường được áp dụng: vì chúng tôi đang ghi đè một phương thức được bảo vệ (applyTransformation), điều này không được đảm bảo sẽ hoạt động trong các phiên bản Android trong tương lai.