1 package com.davemorrissey.labs.subscaleview.test.animation; 2 3 import android.graphics.PointF; 4 import android.os.Bundle; 5 import android.support.annotation.Nullable; 6 import android.view.View; 7 8 import com.davemorrissey.labs.subscaleview.ImageSource; 9 import com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.AnimationBuilder; 10 import com.davemorrissey.labs.subscaleview.test.AbstractPagesActivity; 11 import com.davemorrissey.labs.subscaleview.test.Page; 12 import com.davemorrissey.labs.subscaleview.test.R.id; 13 import com.davemorrissey.labs.subscaleview.test.extension.views.PinView; 14 15 import java.util.Arrays; 16 import java.util.Random; 17 18 import static com.davemorrissey.labs.subscaleview.SubsamplingScaleImageView.*; 19 import static com.davemorrissey.labs.subscaleview.test.R.string.*; 20 import static com.davemorrissey.labs.subscaleview.test.R.layout.*; 21 22 public class AnimationActivity extends AbstractPagesActivity { 23 24 private PinView view; 25 26 public AnimationActivity() { 27 super(animation_title, animation_activity, Arrays.asList( 28 new Page(animation_p1_subtitle, animation_p1_text), 29 new Page(animation_p2_subtitle, animation_p2_text), 30 new Page(animation_p3_subtitle, animation_p3_text), 31 new Page(animation_p4_subtitle, animation_p4_text) 32 )); 33 } 34 35 @Override 36 protected void onCreate(@Nullable Bundle savedInstanceState) { 37 super.onCreate(savedInstanceState); 38 findViewById(id.play).setOnClickListener(new OnClickListener() { 39 @Override public void onClick(View v) { AnimationActivity.this.play(); } 40 }); 41 view = findViewById(id.imageView); 42 view.setImage(ImageSource.asset("sanmartino.jpg")); 43 } 44 45 @Override 46 protected void onPageChanged(int page) { 47 if (page == 2) { 48 view.setPanLimit(PAN_LIMIT_CENTER); 49 } else { 50 view.setPanLimit(PAN_LIMIT_INSIDE); 51 } 52 } 53 54 private void play() { 55 Random random = new Random(); 56 if (view.isReady()) { 57 float maxScale = view.getMaxScale(); 58 float minScale = view.getMinScale(); 59 float scale = (random.nextFloat() * (maxScale - minScale)) + minScale; 60 PointF center = new PointF(random.nextInt(view.getSWidth()), random.nextInt(view.getSHeight())); 61 view.setPin(center); 62 AnimationBuilder animationBuilder = view.animateScaleAndCenter(scale, center); 63 if (getPage() == 3) { 64 animationBuilder.withDuration(2000).withEasing(EASE_OUT_QUAD).withInterruptible(false).start(); 65 } else { 66 animationBuilder.withDuration(750).start(); 67 } 68 } 69 } 70 71 } 72