/** * @param spring * the underlying {@link com.facebook.rebound.Spring}. * @param eventImitator * maps an event to a {@link com.facebook.rebound.Spring} * @param performers * map the {@link com.facebook.rebound.Spring} to a * {@link android.view.View} * @param springListeners * additional listeners to attach * @return the builder for chaining */ @NonNull public Builder addMotion(@NonNull final Spring spring, @NonNull final EventImitator eventImitator, @NonNull final Performer[] performers, final SpringListener[] springListeners) { // create struct final Motion motion = new Motion(spring, eventImitator, performers, springListeners); // connect actors motion.imitators[0].setSpring(motion.spring); for (Performer performer : motion.performers) { performer.setTarget(mView); } mMotions.add(motion); return this; }
/** * Creations a new motion object. * * @param spring * the spring to use * @param motionProperties * the properties of the event to track * @param springListeners * additional spring listeners to add * @param trackStrategy * the tracking strategy * @param followStrategy * the follow strategy * @param restValue * the spring rest value * @return a motion object */ @Nullable private Motion createMotionFromProperties(@NonNull final Spring spring, @NonNull final MotionProperty[] motionProperties, @Nullable final SpringListener[] springListeners, final int trackStrategy, final int followStrategy, final int restValue) { final MotionImitator[] motionImitators = new MotionImitator[motionProperties.length]; final Performer[] performers = new Performer[motionProperties.length]; for (int i = 0; i < motionProperties.length; i++) { final MotionProperty property = motionProperties[i]; motionImitators[i] = new MotionImitator(spring, property, restValue, trackStrategy, followStrategy); performers[i] = new Performer(mView, property.getViewProperty()); } return new Motion(spring, motionImitators, performers, springListeners); }
@TargetApi(Build.VERSION_CODES.HONEYCOMB) public SpringConfiguratorView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); SpringSystem springSystem = SpringSystem.create(); springConfigRegistry = SpringConfigRegistry.getInstance(); spinnerAdapter = new SpinnerAdapter(context); Resources resources = getResources(); mRevealPx = dpToPx(40, resources); mStashPx = dpToPx(280, resources); mRevealerSpring = springSystem.createSpring(); SpringListener revealerSpringListener = new RevealerSpringListener(); mRevealerSpring .setCurrentValue(1) .setEndValue(1) .addListener(revealerSpringListener); addView(generateHierarchy(context)); SeekbarListener seekbarListener = new SeekbarListener(); mTensionSeekBar.setMax(MAX_SEEKBAR_VAL); mTensionSeekBar.setOnSeekBarChangeListener(seekbarListener); mFrictionSeekBar.setMax(MAX_SEEKBAR_VAL); mFrictionSeekBar.setOnSeekBarChangeListener(seekbarListener); mSpringSelectorSpinner.setAdapter(spinnerAdapter); mSpringSelectorSpinner.setOnItemSelectedListener(new SpringSelectedListener()); refreshSpringConfigurations(); this.setTranslationY(mStashPx); }
private Motion(@NonNull final Spring spring, @NonNull final Performer[] performers, @Nullable final SpringListener[] springListeners) { this.imitators = new MotionImitator[0]; this.performers = performers; this.spring = spring; this.springListeners = springListeners; }
private Motion(@NonNull final Spring spring, @NonNull final EventImitator[] imitators, @NonNull final Performer[] performers, @Nullable final SpringListener[] springListeners) { this.imitators = imitators; this.performers = performers; this.spring = spring; this.springListeners = springListeners; }
/** * Removes all spring listeners controlled by this {@link Actor}. */ public void removeAllListeners() { for (Motion motion : mMotions) { for (Performer performer : motion.performers) { motion.spring.removeListener(performer); } if (motion.springListeners != null) { for (SpringListener listener : motion.springListeners) { motion.spring.removeListener(listener); } } } }
/** * Adds all spring listeners back. */ public void addAllListeners() { for (Motion motion : mMotions) { for (Performer performer : motion.performers) { motion.spring.addListener(performer); } if (motion.springListeners != null) { for (SpringListener listener : motion.springListeners) { motion.spring.addListener(listener); } } } }
/** * @param motionImitator * maps an event to a {@link com.facebook.rebound.Spring} * @param viewProperty * the {@link android.view.View} property to animate * @param springListener * additional listener to attach * @return the builder for chaining */ @NonNull public Builder addMotion(@NonNull final MotionImitator motionImitator, @NonNull final Property<View, Float> viewProperty, final SpringListener springListener) { return addMotion(mSpringSystem.createSpring(), motionImitator, new Performer[] { new Performer(viewProperty) }, new SpringListener[] { springListener }); }
@TargetApi(Build.VERSION_CODES.HONEYCOMB) public SpringConfiguratorView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); SpringSystem springSystem = SpringSystem.create(); springConfigRegistry = SpringConfigRegistry.getInstance(); spinnerAdapter = new SpinnerAdapter(context); Resources resources = getResources(); mRevealPx = dpToPx(40, resources); mStashPx = dpToPx(280, resources); mRevealerSpring = springSystem.createSpring(); SpringListener revealerSpringListener = new RevealerSpringListener(); mRevealerSpring .setCurrentValue(1) .setEndValue(1) .addListener(revealerSpringListener); addView(generateHierarchy(context)); SeekbarListener seekbarListener = new SeekbarListener(); mTensionSeekBar.setMax(MAX_SEEKBAR_VAL); mTensionSeekBar.setOnSeekBarChangeListener(seekbarListener); mFrictionSeekBar.setMax(MAX_SEEKBAR_VAL); mFrictionSeekBar.setOnSeekBarChangeListener(seekbarListener); mSpringSelectorSpinner.setAdapter(spinnerAdapter); mSpringSelectorSpinner.setOnItemSelectedListener(new SpringSelectedListener()); refreshSpringConfigurations(); //this.setTranslationY(mStashPx); }
public Spring createSpringFromBouncinessAndSpeed(double bounciness, double speed, SpringListener springListener){ return mSpringSystem.createSpring().setSpringConfig( SpringConfig.fromBouncinessAndSpeed(bounciness,speed)) .addListener(springListener); }
private Motion(@NonNull final Spring spring, @NonNull final EventImitator imitator, @NonNull final Performer[] performers, @Nullable final SpringListener[] springListeners) { this(spring, new EventImitator[] { imitator }, performers, springListeners); }
public SpringListener getHorizontalPositionListener() { return xPositionListener; }
public SpringListener getVerticalPositionListener() { return yPositionListener; }
/** * Uses the default {@link com.facebook.rebound.SpringConfig} to animate the view. * * @param property * the event field to imitate and the view property to animate. * @param listener * a listener to call * @return this builder for chaining */ @NonNull public Builder addTranslateMotion(final MotionProperty property, final SpringListener listener) { return addMotion(mSpringSystem.createSpring(), Imitator.TRACK_ABSOLUTE, Imitator.FOLLOW_EXACT, new MotionProperty[] { property }, new SpringListener[] { listener }); }
/** * @param spring * the underlying {@link com.facebook.rebound.Spring}. * @param trackStrategy * the tracking behavior * @param followStrategy * the follow behavior * @param restValue * the rest value * @param property * the event fields to imitate and the view property to animate. * @param springListener * a spring listener to attach to the spring * @return this builder for chaining */ @NonNull public Builder addMotion(@NonNull final Spring spring, final int trackStrategy, final int followStrategy, final int restValue, final MotionProperty property, @Nullable final SpringListener springListener) { mMotions.add( createMotionFromProperties(spring, new MotionProperty[] { property }, new SpringListener[] { springListener }, trackStrategy, followStrategy, restValue)); return this; }
/** * @param spring * the underlying {@link com.facebook.rebound.Spring}. * @param trackStrategy * the tracking behavior * @param followStrategy * the follow behavior * @param properties * the event fields to imitate and the view properties to animate. * @param springListeners * an array of spring listeners to attach to the spring * @return this builder for chaining */ @NonNull public Builder addMotion(@NonNull final Spring spring, final int trackStrategy, final int followStrategy, @NonNull final MotionProperty[] properties, final SpringListener[] springListeners) { mMotions.add( createMotionFromProperties(spring, properties, springListeners, trackStrategy, followStrategy, 0)); return this; }