Tweak image view animations to use overshoot and decelerate interpolators.

Also use the higher resolution thumbnail when transitioning in.
This does cause a small delay when tapping in image because
Volley needs to decode the thumbnail again for a higher res,
might reconsider this.
filtering
Floens 10 years ago
parent 79e37ca611
commit 784272e9e7
  1. 33
      Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java

@ -20,6 +20,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.OvershootInterpolator;
import android.widget.CheckBox;
import android.widget.Toast;
@ -58,7 +59,7 @@ import static org.floens.chan.utils.AndroidUtils.dp;
public class ImageViewerController extends Controller implements View.OnClickListener, ImageViewerPresenter.Callback, ToolbarMenuItem.ToolbarMenuItemCallback {
private static final String TAG = "ImageViewerController";
private static final int TRANSITION_DURATION = 200;
private static final int TRANSITION_DURATION = 300;
private static final float TRANSITION_FINAL_ALPHA = 0.85f;
private static final int SAVE_ID = 101;
@ -275,20 +276,22 @@ public class ImageViewerController extends Controller implements View.OnClickLis
statusBarColorPrevious = getWindow().getStatusBarColor();
}
setBackgroundAlpha(0f);
startAnimation = new AnimatorSet();
ValueAnimator progress = ValueAnimator.ofFloat(0f, 1f);
progress.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
setBackgroundAlpha((float) animation.getAnimatedValue());
setBackgroundAlpha(Math.min(1f, (float) animation.getAnimatedValue()));
previewImage.setProgress((float) animation.getAnimatedValue());
}
});
startAnimation.play(progress);
startAnimation.setDuration(TRANSITION_DURATION);
startAnimation.setInterpolator(new DecelerateInterpolator());
startAnimation.setInterpolator(new OvershootInterpolator(1.3f));
startAnimation.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationStart(Animator animation) {
@ -301,7 +304,22 @@ public class ImageViewerController extends Controller implements View.OnClickLis
presenter.onInTransitionEnd();
}
});
startAnimation.start();
ChanApplication.getVolleyImageLoader().get(postImage.thumbnailUrl, new ImageLoader.ImageListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "onErrorResponse for preview in transition in ImageViewerController, cannot show correct transition bitmap");
startAnimation.start();
}
@Override
public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
if (response.getBitmap() != null) {
previewImage.setBitmap(response.getBitmap());
startAnimation.start();
}
}
}, previewImage.getWidth(), previewImage.getHeight());
}
public void startPreviewOutTransition(final PostImage postImage) {
@ -309,7 +327,6 @@ public class ImageViewerController extends Controller implements View.OnClickLis
return;
}
// Should definitely be loaded
ChanApplication.getVolleyImageLoader().get(postImage.thumbnailUrl, new ImageLoader.ImageListener() {
@Override
public void onErrorResponse(VolleyError error) {
@ -319,7 +336,9 @@ public class ImageViewerController extends Controller implements View.OnClickLis
@Override
public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {
doPreviewOutAnimation(postImage, response.getBitmap());
if (response.getBitmap() != null) {
doPreviewOutAnimation(postImage, response.getBitmap());
}
}
}, previewImage.getWidth(), previewImage.getHeight());
}
@ -370,7 +389,7 @@ public class ImageViewerController extends Controller implements View.OnClickLis
endAnimation.play(progress);
}
endAnimation.setDuration(TRANSITION_DURATION);
endAnimation.setInterpolator(new DecelerateInterpolator());
endAnimation.setInterpolator(new DecelerateInterpolator(3f));
endAnimation.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {

Loading…
Cancel
Save