X-Git-Url: https://git.mdrn.pl/mobilnebezpieczenstwo.git/blobdiff_plain/4b08fd3d054a0b4872d60adc7627bfdef069c39b..be45943134f44b96728f516e91a66149e51443c0:/app/src/main/java/com/samsung/srpol/parallax/ParallaxedView.java diff --git a/app/src/main/java/com/samsung/srpol/parallax/ParallaxedView.java b/app/src/main/java/com/samsung/srpol/parallax/ParallaxedView.java new file mode 100644 index 0000000..e41e3a1 --- /dev/null +++ b/app/src/main/java/com/samsung/srpol/parallax/ParallaxedView.java @@ -0,0 +1,107 @@ +/* + The MIT License (MIT) + + Copyright (c) 2014 Nir Hartmann + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. + */ +package com.samsung.srpol.parallax; + +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.List; + +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; + +public abstract class ParallaxedView { + static public boolean isAPI11 = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; + protected WeakReference view; + protected int lastOffset; + protected List animations; + + abstract protected void translatePreICS(View view, float offset); + + public ParallaxedView(View view) { + this.lastOffset = 0; + this.animations = new ArrayList(); + this.view = new WeakReference(view); + } + + 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); + } + + public View getView() { + return this.view.get(); + } +}