Android-анимация на экране

Я хочу использовать ScaleAnimation (программно не в xml) для изменения высоты для просмотра от 0 до 60% от родительской высоты. Ширина представления постоянна и составляет 50 пикселей. Вид пуст, только цвет фона установлен.

Может ли кто-нибудь дать мне код для scaleAnim, используя ScaleAnimation из кода.

<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/layContainer
    >
<View  
    android:layout_width="50px" 
    android:layout_height="fill_parent" 
    android:id="@+id/viewContainer" 
    android:background:"#00f00"
    />

</LinearLayout>


ScaleAnimation scaleAnim = new ScaleAnimation(...);

view before and after animation

просмотр до и после анимации .thanks

Ответ 1

Вот как это сделать.

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 связанных с обработкой X-шкалы, о которой нам не заботит (1f, 1f, ... Animation.RELATIVE_TO_SELF, 0f, ...).

Остальные 4 аргумента предназначены для масштабирования Y, о котором мы заботимся.

startScale, endScale - В вашем случае вы должны использовать 0f, 0.6f.

Animation.RELATIVE_TO_SELF, 1f - Здесь указывается, где сжимается вид представления (называемый точкой поворота в документации). Здесь мы устанавливаем значение float 1f, потому что мы хотим, чтобы анимация начала увеличивать планку снизу. Если бы мы хотели, чтобы он падал сверху вниз, мы использовали бы 0f.

Наконец, и не менее важно, это вызов anim.setFillAfter(true). Если вы хотите, чтобы результат анимации оставался после завершения анимации, вы должны запустить его на аниматоре перед выполнением анимации.

Итак, в вашем случае вы можете сделать что-то вроде этого:

View v = findViewById(R.id.viewContainer);
scaleView(v, 0f, .6f);

Ответ 2

попробуйте этот код, чтобы создать анимацию Scale без использования xml

ScaleAnimation animation = new ScaleAnimation(fromXscale, toXscale, fromYscale, toYscale, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);

Ответ 3

В XML это то, что я использую для достижения того же результата. Может быть, это более интуитивно.

scale_up.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<scale
    android:duration="200"
    android:fromXScale="1.0"
    android:fromYScale="0.0"
    android:pivotX="50%"
    android:pivotY="100%"
    android:toXScale="1.0"
    android:toYScale="1.0" />

</set>

scale_down.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<scale
    android:duration="200"
    android:fromXScale="1.0"
    android:fromYScale="1.0"
    android:pivotX="50%"
    android:pivotY="100%"
    android:toXScale="1.0"
    android:toYScale="0.0" />

</set>

См. анимацию по оси X от 1.0 -> 1.0, что означает, что у вас нет масштабирования в этом направлении и она остается на полной ширине, а на оси Y вы получаете масштабирование 0.0 -> 1.0, как показано на рисунке графика в вопросе. Надеюсь, это поможет кому-то.