From 5347f67d74550dd5c48c05dd04fa78380c759ea2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tomasz=20P=C3=B3=C5=82grabia?= <tpsa.s.a@gmail.com>
Date: Sat, 17 Sep 2016 12:47:24 +0200
Subject: [PATCH] Added transition while swiping left/right.

---
 .../urbanexplorer/MainActivity.java           | 37 ++++++++++++++++++-
 app/src/main/res/anim/slide_in_left.xml       |  8 ++++
 app/src/main/res/anim/slide_in_right.xml      |  8 ++++
 app/src/main/res/anim/slide_out_left.xml      |  8 ++++
 app/src/main/res/anim/slide_out_right.xml     |  8 ++++
 5 files changed, 67 insertions(+), 2 deletions(-)
 create mode 100644 app/src/main/res/anim/slide_in_left.xml
 create mode 100644 app/src/main/res/anim/slide_in_right.xml
 create mode 100644 app/src/main/res/anim/slide_out_left.xml
 create mode 100644 app/src/main/res/anim/slide_out_right.xml

diff --git a/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java b/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java
index 76bbb03..a03679b 100644
--- a/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java
+++ b/app/src/main/java/pl/tpolgrabia/urbanexplorer/MainActivity.java
@@ -61,6 +61,7 @@ public class MainActivity extends ActionBarActivity {
     private GestureDetector.OnGestureListener swipeHandler;
     private PanoramioImageInfo photoInfo;
     private ProgressDialog progressDlg;
+    private int oldFragmentId = 0;
 
     public StandardLocationListener getLocationCallback() {
         return locationCallback;
@@ -216,6 +217,27 @@ public class MainActivity extends ActionBarActivity {
 
         FragmentManager fragmentManager = getSupportFragmentManager();
         FragmentTransaction ctx = fragmentManager.beginTransaction();
+        Log.v(CLASS_TAG, "old fragment id: " + oldFragmentId + ", current fragment id: " + currentFragmentId);
+        if (oldFragmentId != currentFragmentId) {
+            if (currentFragmentId < oldFragmentId) {
+                // slide left animation
+                Log.v(CLASS_TAG, "sliding left animation");
+                ctx.setCustomAnimations(
+                    R.anim.slide_in_left,
+                    R.anim.slide_out_left,
+                    R.anim.slide_in_right,
+                    R.anim.slide_out_right);
+            } else {
+                // slide right animation
+                Log.v(CLASS_TAG, "sliding right animation");
+                ctx.setCustomAnimations(
+                    R.anim.slide_in_right,
+                    R.anim.slide_out_right,
+                    R.anim.slide_in_left,
+                    R.anim.slide_out_left);
+            }
+        }
+
         ctx.replace(R.id.fragments, fragment, tag);
         ctx.addToBackStack(null);
         ctx.commit();
@@ -235,12 +257,17 @@ public class MainActivity extends ActionBarActivity {
     }
 
     public void swipeLeft() {
-        currentFragmentId = (int)Math.max(MIN_FRAGMENT_ID, currentFragmentId-1);
+        changeCurrentFragId((int)Math.max(MIN_FRAGMENT_ID, currentFragmentId-1));
         switchFragment();
     }
 
+    private void changeCurrentFragId(int nextFragmentId) {
+        oldFragmentId = currentFragmentId;
+        currentFragmentId = nextFragmentId;
+    }
+
     public void swipeRight() {
-        currentFragmentId = (int)Math.min(MAX_FRAGMENT_ID, currentFragmentId+1);
+        changeCurrentFragId((int)Math.min(MAX_FRAGMENT_ID, currentFragmentId+1));
         switchFragment();
     }
 
@@ -350,6 +377,12 @@ public class MainActivity extends ActionBarActivity {
         super.onSaveInstanceState(outState);
         outState.putSerializable(FRAG_ID, currentFragmentId);
         outState.putSerializable(PHOTO_INFO, photoInfo);
+
+//        SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+//        SharedPreferences.Editor editor = sharedPrefs.edit();
+//        editor.putInt(FRAG_ID, currentFragmentId);
+//        editor.commit();
+
         Log.v(CLASS_TAG, "2 Saving current fragment id: " + currentFragmentId);
     }
 
diff --git a/app/src/main/res/anim/slide_in_left.xml b/app/src/main/res/anim/slide_in_left.xml
new file mode 100644
index 0000000..07bb91c
--- /dev/null
+++ b/app/src/main/res/anim/slide_in_left.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:fromXDelta="100%"
+        android:toXDelta="0%"
+        android:interpolator="@android:anim/decelerate_interpolator"
+        android:duration="1000" />
+</set>
\ No newline at end of file
diff --git a/app/src/main/res/anim/slide_in_right.xml b/app/src/main/res/anim/slide_in_right.xml
new file mode 100644
index 0000000..237063a
--- /dev/null
+++ b/app/src/main/res/anim/slide_in_right.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:fromXDelta="-100%"
+        android:toXDelta="0%"
+        android:interpolator="@android:anim/decelerate_interpolator"
+        android:duration="1000" />
+</set>
\ No newline at end of file
diff --git a/app/src/main/res/anim/slide_out_left.xml b/app/src/main/res/anim/slide_out_left.xml
new file mode 100644
index 0000000..21dc08f
--- /dev/null
+++ b/app/src/main/res/anim/slide_out_left.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:fromXDelta="0%"
+        android:toXDelta="-100%"
+        android:interpolator="@android:anim/decelerate_interpolator"
+        android:duration="1000" />
+</set>
\ No newline at end of file
diff --git a/app/src/main/res/anim/slide_out_right.xml b/app/src/main/res/anim/slide_out_right.xml
new file mode 100644
index 0000000..e49f999
--- /dev/null
+++ b/app/src/main/res/anim/slide_out_right.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <translate
+        android:fromXDelta="0%"
+        android:toXDelta="100%"
+        android:interpolator="@android:anim/decelerate_interpolator"
+        android:duration="1000" />
+</set>
\ No newline at end of file