Вот фрагмент кода, чтобы сделать именно это.
public void scaleView(View v, float startScale, float endScale) {
Animation anim = new ScaleAnimation(
1f, 1f, // Start and end values for the X axis scaling
startScale, endScale, // Start and end values for the Y axis scaling
Animation.RELATIVE_TO_SELF, 0f, // Pivot point of X scaling
Animation.RELATIVE_TO_SELF, 1f); // Pivot point of Y scaling
anim.setFillAfter(true); // Needed to keep the result of the animation
anim.setDuration(1000);
v.startAnimation(anim);
}
Используемый здесь конструктор ScaleAnimation принимает 8 аргументов, 4 из которых относятся к обработке шкалы Х, которая нас не волнует (1f, 1f, ... Animation.RELATIVE_TO_SELF, 0f, ...)
.
Остальные 4 аргумента относятся к Y-шкале, о которой мы заботимся.
startScale, endScale
- В вашем случае вы бы использовали 0f, 0.6f
.
Animation.RELATIVE_TO_SELF, 1f
- Здесь указывается, где происходит сжатие представления (в документации это называется стержнем). Здесь мы устанавливаем значение с плавающей точкой 1f
, потому что мы хотим, чтобы анимация начинала увеличивать полосу снизу. Если бы мы хотели, чтобы он рос сверху вниз, мы бы использовали 0f
.
Наконец, не менее важным является призыв к anim.setFillAfter(true)
. Если вы хотите, чтобы результат анимации оставался после завершения анимации, вы должны запустить его на аниматоре перед выполнением анимации.
Так что в вашем случае вы можете сделать что-то вроде этого:
View v = findViewById(R.id.viewContainer);
scaleView(v, 0f, .6f);