Migrate to gradle, appcompat as external dependency.
[mobilnebezpieczenstwo.git] / 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 (file)
index 0000000..e41e3a1
--- /dev/null
@@ -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> view;
+    protected int lastOffset;
+    protected List<Animation> animations;
+
+    abstract protected void translatePreICS(View view, float offset);
+
+    public ParallaxedView(View view) {
+        this.lastOffset = 0;
+        this.animations = new ArrayList<Animation>();
+        this.view = new WeakReference<View>(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>(view);
+    }
+
+    public View getView() {
+        return this.view.get();
+    }
+}