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(...); 

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

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

Solutions Collecting From Web of "Android-анимация на экране"

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

 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); 

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

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

В 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 масштабирования, как показано в Графический в вопросе. Надеюсь, это поможет кому-то.