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(...);
просмотр до и после анимации
.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
, как показано на рисунке графика в вопросе. Надеюсь, это поможет кому-то.