OSDN Git Service

animate filmstrip bottom button bar in and out
authorSpike Sprague <spikuru@google.com>
Tue, 19 Aug 2014 22:33:45 +0000 (15:33 -0700)
committerSpike Sprague <spikuru@google.com>
Thu, 21 Aug 2014 18:23:05 +0000 (11:23 -0700)
from the bottom of the screen

bug: 17114515
Change-Id: If3024f149fc0be0e48a430468c53774893946938

res/layout/camera_filmstrip.xml
src/com/android/camera/CameraActivity.java
src/com/android/camera/app/CameraAppUI.java
src/com/android/camera/app/FilmstripBottomPanel.java

index 63af3e5..023c7dd 100644 (file)
@@ -31,6 +31,7 @@
             android:layout_width="match_parent"
             android:layout_height="match_parent" />
 
-        <include layout="@layout/filmstrip_bottom_controls" />
     </FrameLayout>
+
+    <include layout="@layout/filmstrip_bottom_controls" />
 </com.android.camera.widget.FilmstripLayout>
index a711e63..598d021 100644 (file)
@@ -157,7 +157,7 @@ import java.util.concurrent.TimeUnit;
 
 public class CameraActivity extends Activity
         implements AppController, CameraAgent.CameraOpenCallback,
-        ActionBar.OnMenuVisibilityListener, ShareActionProvider.OnShareTargetSelectedListener,
+        ShareActionProvider.OnShareTargetSelectedListener,
         OrientationManager.OnOrientationChangeListener {
 
     private static final Log.Tag TAG = new Log.Tag("CameraActivity");
@@ -286,6 +286,15 @@ public class CameraActivity extends Activity
         }
     };
 
+    private ActionBar.OnMenuVisibilityListener mOnMenuVisibilityListener =
+            new ActionBar.OnMenuVisibilityListener() {
+        @Override
+        public void onMenuVisibilityChanged(boolean isVisible) {
+            // TODO: Remove this or bring back the original implementation: cancel
+            // auto-hide actionbar.
+        }
+    };
+
     /**
      * Whether the screen is kept turned on.
      */
@@ -603,6 +612,7 @@ public class CameraActivity extends Activity
                 @Override
                 public void onSwipeOutBegin() {
                     mActionBar.hide();
+                    mCameraAppUI.hideBottomControls();
                     mFilmstripCoversPreview = false;
                     updatePreviewVisibility();
                 }
@@ -787,8 +797,10 @@ public class CameraActivity extends Activity
         if (visible != mActionBar.isShowing()) {
             if (visible) {
                 mActionBar.show();
+                mCameraAppUI.showBottomControls();
             } else {
                 mActionBar.hide();
+                mCameraAppUI.hideBottomControls();
             }
         }
         mFilmstripCoversPreview = visible;
@@ -842,12 +854,6 @@ public class CameraActivity extends Activity
     }
 
     @Override
-    public void onMenuVisibilityChanged(boolean isVisible) {
-        // TODO: Remove this or bring back the original implementation: cancel
-        // auto-hide actionbar.
-    }
-
-    @Override
     public boolean onShareTargetSelected(ShareActionProvider shareActionProvider, Intent intent) {
         int currentDataId = mFilmstripController.getCurrentId();
         if (currentDataId < 0) {
@@ -1332,7 +1338,7 @@ public class CameraActivity extends Activity
         getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
         setContentView(R.layout.activity_main);
         mActionBar = getActionBar();
-        mActionBar.addOnMenuVisibilityListener(this);
+        mActionBar.addOnMenuVisibilityListener(mOnMenuVisibilityListener);
         mMainHandler = new MainHandler(this, getMainLooper());
         mCameraController = new CameraController(mAppContext, this, mMainHandler,
                 CameraAgentFactory.getAndroidCameraAgent(this, CameraAgentFactory.CameraApi.API_1),
@@ -1848,7 +1854,7 @@ public class CameraActivity extends Activity
         if (mSecureCamera) {
             unregisterReceiver(mScreenOffReceiver);
         }
-        mActionBar.removeOnMenuVisibilityListener(this);
+        mActionBar.removeOnMenuVisibilityListener(mOnMenuVisibilityListener);
         mSettingsManager.removeAllListeners();
         mCameraController.removeCallbackReceiver();
         getContentResolver().unregisterContentObserver(mLocalImagesObserver);
index e41e0c8..b2cea18 100644 (file)
@@ -1487,6 +1487,14 @@ public class CameraAppUI implements ModeListView.ModeSwitchListener,
         return mFilmstripBottomControls;
     }
 
+    public void showBottomControls() {
+        mFilmstripBottomControls.show();
+    }
+
+    public void hideBottomControls() {
+        mFilmstripBottomControls.hide();
+    }
+
     /**
      * @param listener The listener for bottom controls.
      */
index 572ab83..661e50f 100644 (file)
@@ -23,6 +23,7 @@ import android.widget.ImageButton;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
+import com.android.camera.util.Gusterpolator;
 import com.android.camera.widget.Cling;
 import com.android.camera.widget.ExternalViewerButton;
 import com.android.camera2.R;
@@ -32,6 +33,7 @@ import com.android.camera2.R;
  * sphere image and creating a tiny planet from a photo sphere image.
  */
 class FilmstripBottomPanel implements CameraAppUI.BottomPanel {
+    private static final int ANIM_DURATION = 150;
 
     private final AppController mController;
     private final ViewGroup mLayout;
@@ -265,4 +267,18 @@ class FilmstripBottomPanel implements CameraAppUI.BottomPanel {
             mMiddleFiller.setVisibility(View.GONE);
         }
     }
+
+    public void show() {
+        int offset = mLayout.getHeight();
+        mLayout.setTranslationY(offset);
+        mLayout.animate().translationY(0).setDuration(ANIM_DURATION)
+                .setInterpolator(Gusterpolator.INSTANCE);
+    }
+
+    public void hide() {
+        int offset = mLayout.getHeight();
+        mLayout.setTranslationY(0);
+        mLayout.animate().translationY(offset).setDuration(ANIM_DURATION)
+                .setInterpolator(Gusterpolator.INSTANCE);
+    }
 }