package com.google.android.material.motion.sample;
import android.graphics.PointF;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.google.android.material.motion.MotionRuntime;
import com.google.android.material.motion.ReactiveProperty;
import com.google.android.material.motion.interactions.MaterialSpring;
import com.google.android.material.motion.interactions.SetPositionOnTap;
import com.google.android.material.motion.interactions.Tossable;
import com.google.android.material.motion.properties.ViewProperties;
import com.google.android.material.motion.sources.DynamicSpringSource;
import com.google.android.material.motion.springs.FloatVectorizer;
public class TossableTapActivity extends AppCompatActivity {
private final MotionRuntime runtime = new MotionRuntime();
private View container;
private View target;
private View destination;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tossable_tap_activity);
container = findViewById(android.R.id.content);
target = findViewById(R.id.target);
destination = findViewById(R.id.destination);
destination.setBackgroundDrawable(new CheckerboardDrawable());
target.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(
View v,
int left,
int top,
int right,
int bottom,
int oldLeft,
int oldTop,
int oldRight,
int oldBottom) {
v.removeOnLayoutChangeListener(this);
runDemo();
}
});
}
private void runDemo() {
PointF anchor = runtime.get(target).center().read();
ReactiveProperty<PointF> reactiveAnchor = ReactiveProperty.of(anchor);
Tossable tossable = new Tossable(ViewProperties.CENTER, reactiveAnchor);
runtime.addInteraction(tossable, target);
runtime.addInteraction(new SetPositionOnTap(container), reactiveAnchor);
runtime.write(reactiveAnchor.getStream(), runtime.get(destination).center());
}
}