Сайт разработчика Александр Климова

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Библиотека Rebound

Библиотека Rebound была разработана программистами Facebook. Сама она написана на Java и позволяет создавать реалистичные анимационные эффекты.

Домашняя страница на Гитхабе

На момент написания версия библиотеки 0.3.6

Скачаем jar-файл или установим зависимость в Gradle.


dependencies {
    compile 'com.facebook.rebound:rebound:0.3.6'
}

Для беглого знакомства разместим на экране ImageView и пропишем у него атрибут android:onClick="onClick" для щелчка. Далее напишем код для щелчка.



ImageView imageView = (ImageView)findViewById(R.id.imageView);

public void onClick(View v) {
	// Create a system to run the physics loop for a set of springs.
	SpringSystem springSystem = SpringSystem.create();

	// Add a spring to the system.
	Spring spring = springSystem.createSpring();

	// Add a listener to observe the motion of the spring.
	spring.addListener(new SimpleSpringListener() {

		@Override
		public void onSpringUpdate(Spring spring) {
			// You can observe the updates in the spring
			// state by asking its current value in onSpringUpdate.
			float value = (float) spring.getCurrentValue();
			float scale = 1f - (value * 0.5f);
			imageView.setScaleX(scale);
			imageView.setScaleY(scale);
		}
	});

	// Set the spring in motion; moving from 0 to 1
	spring.setEndValue(1);
}

При нажатии на картинку она уменьшится в два раз с реалистичной анимацией. Сначала сожмётся чуть больше, чем нужно, а потом восстановится до нужных размеров.

Далее вы можете изучить примеры к библиотеке. Например, этот пример, похож на наш. Только в примере использована прозрачная панель (компонент com.facebook.rebound.ui.SpringConfiguratorView), который вызывается из нижней части экрана нажатием на прямоугольник или сдвигом вверх. На этой панели находятся инструменты для настройки анимации.

Переработаем наш первый пример, чтобы картинка реагировала не на щелчок, а на касание. Внизу будет видео получившегося результата.


package ru.alexanderklimov.test;

import com.facebook.rebound.Spring;
import com.facebook.rebound.SpringConfig;
import com.facebook.rebound.SpringListener;
import com.facebook.rebound.SpringSystem;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends Activity implements View.OnTouchListener,
		SpringListener {

	private static double TENSION = 800;
	private static double DAMPER = 20; // friction

	private ImageView mImageToAnimate;
	private SpringSystem mSpringSystem;
	private Spring mSpring;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mImageToAnimate = (ImageView) findViewById(R.id.imageView);
		mImageToAnimate.setOnTouchListener(this);

		mSpringSystem = SpringSystem.create();

		mSpring = mSpringSystem.createSpring();
		mSpring.addListener(this);

		SpringConfig config = new SpringConfig(TENSION, DAMPER);
		mSpring.setSpringConfig(config);

	}

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		// v.performClick();
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			mSpring.setEndValue(1f);
			return true;
		case MotionEvent.ACTION_UP:
			mSpring.setEndValue(0f);
			return true;
		}
		v.performClick();
		return false;
	}

	@Override
	public void onSpringUpdate(Spring spring) {
		float value = (float) spring.getCurrentValue();
		float scale = 1f - (value * 0.5f);
		mImageToAnimate.setScaleX(scale);
		mImageToAnimate.setScaleY(scale);
	}

	@Override
	public void onSpringAtRest(Spring spring) {

	}

	@Override
	public void onSpringActivate(Spring spring) {

	}

	@Override
	public void onSpringEndStateChange(Spring spring) {

	}
}

Ещё примеры есть здесь

Это простейшие примеры. Но можно придумать и более сложные вещи.

Реклама