public
class MainActivity extends Activity implements View.OnTouchListener, SpringListener {
private
int tension =
40;
private
int friction =
3;
private ImageView ivScalaImage;
private SpringSystem mSpringSystem;
private Spring mSpring;
private SeekBar skTension,skFriction;
private TextView tvTension,tvFriction;
private SBListener sbListener;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
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);
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();
}
}
}