package com.nirhart.parallaxscroll.views; import android.annotation.SuppressLint; import android.os.Build; import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; public abstract class ParallaxedView { static public boolean isAPI11 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; protected WeakReference<View> view; protected int lastOffset; protected List<Animation> animations; public ParallaxedView(View view) { this.lastOffset = 0; this.animations = new ArrayList<Animation>(); this.view = new WeakReference<View>(view); } abstract protected void translatePreICS(View view, float offset); public boolean is(View v) { return (v != null && view != null && view.get() != null && view.get().equals(v)); } @SuppressLint("NewApi") public void setOffset(float offset) { View view = this.view.get(); if (view != null) if (isAPI11) { view.setTranslationY(offset); } else { translatePreICS(view, offset); } } public void setAlpha(float alpha) { View view = this.view.get(); if (view != null) if (isAPI11) { view.setAlpha(alpha); } else { alphaPreICS(view, alpha); } } protected synchronized void addAnimation(Animation animation) { animations.add(animation); } protected void alphaPreICS(View view, float alpha) { addAnimation(new AlphaAnimation(alpha, alpha)); } protected synchronized void animateNow() { View view = this.view.get(); if (view != null) { AnimationSet set = new AnimationSet(true); for (Animation animation : animations) if (animation != null) set.addAnimation(animation); set.setDuration(0); set.setFillAfter(true); view.setAnimation(set); set.start(); animations.clear(); } } public void setView(View view) { this.view = new WeakReference<View>(view); } }