package com.cui.trypro.animation_groups; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.TextView; import com.cui.trypro.BaseActivity; import com.cui.trypro.R; import com.facebook.rebound.Spring; import com.facebook.rebound.SpringConfig; import com.facebook.rebound.SpringListener; import com.facebook.rebound.SpringSystem; import butterknife.ButterKnife; import butterknife.InjectView; /** * Created by cuiyang on 15/8/3. */ public class ReboundActivity extends BaseActivity implements View.OnTouchListener, SpringListener { // Create a system to run the physics loop for a set of springs. //.首先创建一个SpringSystem对象 SpringSystem mSpringSystem = SpringSystem.create(); private int tension = 40; //张力系数 private int friction = 3; //阻力系数 private Spring mSpring; private SBListener sbListener; @InjectView(R.id.imageView) ImageView ivScalaImage; @InjectView(R.id.tvTension) TextView tvTension; @InjectView(R.id.skTension) SeekBar skTension; @InjectView(R.id.llTension) LinearLayout llTension; @InjectView(R.id.tvFriction) TextView tvFriction; @InjectView(R.id.skFriction) SeekBar skFriction; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.rebound_act); ButterKnife.inject(this); super.initToolbar("OpenAct", true); //初始化控件 initWidget(); //创建系统用于循环执行控件弹簧效果 mSpringSystem = SpringSystem.create(); //给系统添加一个“弹簧” mSpring = mSpringSystem.createSpring(); //添加监听器,监听“弹簧”的形变 mSpring.addListener(this); //根据张力系数和阻力系数创建一组“弹簧”参数 SpringConfig config = new SpringConfig(tension, friction); //配置“弹簧” mSpring.setSpringConfig(config); } private void initWidget() { ivScalaImage = (ImageView) findViewById(R.id.imageView); ivScalaImage.setOnTouchListener(this); skTension = (SeekBar) findViewById(R.id.skTension); skFriction = (SeekBar) findViewById(R.id.skFriction); sbListener = new SBListener(); skTension.setMax(100); skFriction.setMax(30); skTension.setOnSeekBarChangeListener(sbListener); skFriction.setOnSeekBarChangeListener(sbListener); tvTension = (TextView) findViewById(R.id.tvTension); tvFriction = (TextView) findViewById(R.id.tvFriction); skTension.setProgress(tension); skFriction.setProgress(friction); tvTension.setText("张力系数: " + tension); tvFriction.setText("阻力系数: " + friction); } @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mSpring.setEndValue(1f); return true; case MotionEvent.ACTION_UP: mSpring.setEndValue(0f); return true; } return false; } @Override public void onSpringUpdate(Spring spring) { float value = (float) spring.getCurrentValue(); float scale = 1f - (value * 0.5f); ivScalaImage.setScaleX(scale); ivScalaImage.setScaleY(scale); } @Override public void onSpringAtRest(Spring spring) { SpringConfig config = new SpringConfig(tension, friction);//通过seekbar上的数字来设置张力和阴阻力 mSpring.setSpringConfig(config); } @Override public void onSpringActivate(Spring spring) { } @Override public void onSpringEndStateChange(Spring spring) { } private class SBListener implements SeekBar.OnSeekBarChangeListener { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (seekBar.getId() == R.id.skTension) { tension = progress; skTension.setProgress(tension); tvTension.setText("张力系数: " + tension); } else if (seekBar.getId() == R.id.skFriction) { friction = progress; skFriction.setProgress(friction); tvFriction.setText("阻力系数: " + friction); } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { mSpring.setAtRest(); } } }