package com.github.takahirom.materialelement.motion.durationeasing;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.CollapsingToolbarLayout;
import android.support.v4.app.ActivityCompat;
import android.support.v4.view.animation.FastOutLinearInInterpolator;
import android.support.v4.view.animation.FastOutSlowInInterpolator;
import android.support.v4.view.animation.LinearOutSlowInInterpolator;
import android.support.v4.view.animation.PathInterpolatorCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.transition.Transition;
import android.view.View;
import android.view.animation.Interpolator;
import android.widget.ImageView;
import com.github.takahirom.materialelement.MaterialElementActivity;
import com.github.takahirom.materialelement.animation.transition.TransitionUtils;
import com.github.takahirom.materialelement.main.ImplementationItem;
import com.github.takahirom.materialelement.R;
import com.github.takahirom.materialelement.util.ScreenUtil;
public class DurationAndEasingActivity extends MaterialElementActivity {
public final static String RESULT_EXTRA_ITEM_ID = "RESULT_EXTRA_ITEM_ID";
public static final String INTENT_EXTRA_ITEM = "item";
private ImplementationItem item;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_dynamic_durations);
item = getIntent().getParcelableExtra(INTENT_EXTRA_ITEM);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
setupViews();
}
public void setupViews() {
final CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar);
final ImageView imageView = (ImageView) findViewById(R.id.detail_image);
// collapsingToolbarLayout.setExpandedTitleColor(ContextCompat.getColor(DurationAndEasingActivity.this, android.R.color.white));
imageView.setImageResource(item.imageRes);
// If you want to load async, you can use this code
// ActivityCompat.postponeEnterTransition(this);
// Glide.with(this).load(item.imageUrl).into(new GlideDrawableImageViewTarget(imageView) {
// @Override
// protected void setResource(GlideDrawable resource) {
// super.setResource(resource);
//
// imageView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
// @Override
// public boolean onPreDraw() {
// ActivityCompat.startPostponedEnterTransition(DurationAndEasingActivity.this);
// imageView.getViewTreeObserver().removeOnPreDrawListener(this);
// default_window_return true;
// }
// });
// }
// });
TransitionUtils.setSharedElementEnterTransitionEndListenerCompat(getWindow(), new TransitionUtils.OnSharedElementEnterTransitionEndListener() {
@Override
public void onEnd(Transition transition) {
collapsingToolbarLayout.setTitleEnabled(true);
collapsingToolbarLayout.setTitle(item.title);
}
});
setupCustomDuration();
setupNaturalCurve();
}
private void setupNaturalCurve() {
final View standardFab = findViewById(R.id.curve_standard_fab);
final View decelerationFab = findViewById(R.id.curve_deceleration_fab);
final View accelerationFab = findViewById(R.id.curve_acceleration_fab);
final View sharpFab = findViewById(R.id.curve_sharp_fab);
findViewById(R.id.easing_carve_text).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
standardFab.performClick();
decelerationFab.performClick();
accelerationFab.performClick();
sharpFab.performClick();
}
});
final float transitionXPx = ScreenUtil.dp2px(280, DurationAndEasingActivity.this);
standardFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getTranslationX() > 0) {
v
.animate()
.translationX(0)
.setDuration(280)
.setInterpolator(new FastOutSlowInInterpolator())
.start();
} else {
v
.animate()
.translationX(transitionXPx)
.setDuration(280)
.setInterpolator(new FastOutSlowInInterpolator())
.start();
}
}
});
decelerationFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getTranslationX() > 0) {
v
.animate()
.translationX(0)
.setDuration(280)
.setInterpolator(new LinearOutSlowInInterpolator())
.start();
} else {
v
.animate()
.translationX(transitionXPx)
.setDuration(280)
.setInterpolator(new LinearOutSlowInInterpolator())
.start();
}
}
});
accelerationFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getTranslationX() > 0) {
v
.animate()
.translationX(0)
.setDuration(280)
.setInterpolator(new FastOutLinearInInterpolator())
.start();
} else {
v
.animate()
.translationX(transitionXPx)
.setDuration(280)
.setInterpolator(new FastOutLinearInInterpolator())
.start();
}
}
});
final Interpolator sharpInterpolator = PathInterpolatorCompat.create(0.4f, 0, 0.6f, 1);
sharpFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getTranslationX() > 0) {
v
.animate()
.translationX(0)
.setDuration(290)
.setInterpolator(sharpInterpolator)
.start();
} else {
v
.animate()
.translationX(transitionXPx)
.setDuration(290)
.setInterpolator(sharpInterpolator)
.start();
}
}
});
}
private void setupCustomDuration() {
final View dynamicDurationLongFab = findViewById(R.id.duration_fab1);
final View dynamicDurationShortFab = findViewById(R.id.duration_fab2);
findViewById(R.id.dynamic_duration_text).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dynamicDurationLongFab.performClick();
dynamicDurationShortFab.performClick();
}
});
dynamicDurationLongFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (view.getTranslationX() > 0) {
view.animate().translationX(0).setDuration(290).start();
} else {
view.animate().translationX(ScreenUtil.dp2px(300, DurationAndEasingActivity.this)).setDuration(290).start();
}
}
});
dynamicDurationShortFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (view.getTranslationX() > 0) {
view.animate().translationX(0).setDuration(225).start();
} else {
view.animate().translationX(ScreenUtil.dp2px(120, DurationAndEasingActivity.this)).setDuration(225).start();
}
}
});
}
@Override
public void onBackPressed() {
setResultAndFinish();
}
void setResultAndFinish() {
final Intent resultData = new Intent();
resultData.putExtra(RESULT_EXTRA_ITEM_ID, item.itemId);
setResult(RESULT_OK, resultData);
ActivityCompat.finishAfterTransition(this);
}
}