diff --git a/app/src/main/java/com/hippo/effect/ViewTransition.java b/app/src/main/java/com/hippo/effect/ViewTransition.java
new file mode 100644
index 000000000..095608414
--- /dev/null
+++ b/app/src/main/java/com/hippo/effect/ViewTransition.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2015 Hippo Seven
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.hippo.effect;
+
+import android.animation.Animator;
+import android.animation.ObjectAnimator;
+import android.os.Build;
+import android.support.annotation.NonNull;
+import android.view.View;
+
+import com.hippo.animation.SimpleAnimatorListener;
+import com.hippo.util.ViewUtils;
+
+public class ViewTransition {
+
+ private static long ANIMATE_TIME = 300L;
+
+ private View mView1;
+ private View mView2;
+ private boolean mSwitch = false;
+
+ public ViewTransition(@NonNull View view1, @NonNull View view2) {
+ mView1 = view1;
+ mView2 = view2;
+
+ ViewUtils.setVisibility(view1, View.VISIBLE);
+ ViewUtils.setVisibility(view2, View.GONE);
+ }
+
+ public void toggle() {
+ if (mSwitch) {
+ showFirstView();
+ } else {
+ showSecondView();
+ }
+ }
+
+ public void showFirstView() {
+ if (mSwitch) {
+ mSwitch = false;
+
+ ObjectAnimator oa1 = ObjectAnimator.ofFloat(mView1, "alpha", 0f, 1f);
+ oa1.setDuration(ANIMATE_TIME);
+ oa1.addListener(new SimpleAnimatorListener() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+ ViewUtils.setVisibility(mView1, View.VISIBLE);
+ }
+ });
+ ObjectAnimator oa2 = ObjectAnimator.ofFloat(mView2, "alpha", 1f, 0f);
+ oa2.setDuration(ANIMATE_TIME);
+ oa2.addListener(new SimpleAnimatorListener() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ ViewUtils.setVisibility(mView2, View.GONE);
+ }
+ });
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
+ oa1.setAutoCancel(true);
+ oa2.setAutoCancel(true);
+ }
+ oa1.start();
+ oa2.start();
+ }
+ }
+
+ public void showSecondView() {
+ if (!mSwitch) {
+ mSwitch = true;
+
+ ObjectAnimator oa1 = ObjectAnimator.ofFloat(mView1, "alpha", 1f, 0f);
+ oa1.setDuration(ANIMATE_TIME);
+ oa1.addListener(new SimpleAnimatorListener() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ ViewUtils.setVisibility(mView1, View.GONE);
+ }
+ });
+ ObjectAnimator oa2 = ObjectAnimator.ofFloat(mView2, "alpha", 0f, 1f);
+ oa2.setDuration(ANIMATE_TIME);
+ oa2.addListener(new SimpleAnimatorListener() {
+ @Override
+ public void onAnimationStart(Animator animation) {
+ ViewUtils.setVisibility(mView2, View.VISIBLE);
+ }
+ });
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
+ oa1.setAutoCancel(true);
+ oa2.setAutoCancel(true);
+ }
+ oa1.start();
+ oa2.start();
+ }
+ }
+}
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java
index 0499cd55f..5abe7b76a 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java
+++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.java
@@ -18,19 +18,23 @@ package com.hippo.ehviewer.ui.scene;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.annotation.Nullable;
-import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import com.hippo.effect.ViewTransition;
import com.hippo.ehviewer.R;
import com.hippo.ehviewer.ui.ContentActivity;
import com.hippo.ehviewer.widget.ContentLayout;
import com.hippo.ehviewer.widget.SearchBar;
import com.hippo.ehviewer.widget.SearchDatabase;
+import com.hippo.ehviewer.widget.SearchLayout;
import com.hippo.scene.Scene;
-import com.hippo.scene.TransitionCurtain;
import com.hippo.util.Log;
+import com.hippo.util.ViewUtils;
public
-class GalleryListScene extends Scene implements SearchBar.Helper{
+class GalleryListScene extends Scene implements SearchBar.Helper,
+ ViewTreeObserver.OnGlobalLayoutListener {
private final static int PAGE_INDEX_SEARCH = 0;
private final static int PAGE_INDEX_LIST = 1;
@@ -42,6 +46,9 @@ class GalleryListScene extends Scene implements SearchBar.Helper{
private SearchBar mSearchBar;
private ContentLayout mContentLayout;
+ private SearchLayout mSearchLayout;
+
+ private ViewTransition mViewTransition;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
@@ -54,26 +61,22 @@ class GalleryListScene extends Scene implements SearchBar.Helper{
mSearchBar = (SearchBar) findViewById(R.id.search_bar);
mContentLayout = (ContentLayout) findViewById(R.id.content_layout);
+ mSearchLayout = (SearchLayout) findViewById(R.id.search_layout);
+ mViewTransition = new ViewTransition(mContentLayout, mSearchLayout);
+
+ // Search Bar
mSearchBar.setHelper(this);
- mContentLayout.showText("无法连接网络");
+ ViewUtils.measureView(mSearchBar, ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
- View view = getSceneView();
- assert view != null;
- view.postDelayed(new Runnable() {
- @Override
- public void run() {
+ // Search Layout
+ mSearchLayout.setFitPaddingTop(mSearchBar.getMeasuredHeight() +
+ (int) (2 * mResources.getDimension(R.dimen.search_bar_padding_vertical)));
- TransitionCurtain tc = new TransitionCurtain(
- new TransitionCurtain.ViewPair[]{
- new TransitionCurtain.ViewPair(R.id.haha, R.id.haha),
- new TransitionCurtain.ViewPair(R.id.bbbbbb, R.id.bbbbbb)
- }
- );
- startScene(TestScene.class, null, tc);
- }
- }, 1000);
+ // TEST
+ mContentLayout.showText("四姑拉斯基");
}
@Override
@@ -81,6 +84,11 @@ class GalleryListScene extends Scene implements SearchBar.Helper{
// TODO
}
+ @Override
+ public void onGlobalLayout() {
+
+ }
+
@Override
public void onClickMenu() {
mActivity.toggleDrawer();
@@ -88,7 +96,7 @@ class GalleryListScene extends Scene implements SearchBar.Helper{
@Override
public void onClickAction() {
- Log.d("onClickAction");
+ mViewTransition.showSecondView();
}
@Override
diff --git a/app/src/main/java/com/hippo/ehviewer/widget/SearchLayout.java b/app/src/main/java/com/hippo/ehviewer/widget/SearchLayout.java
index de3478915..5a9a82cb1 100644
--- a/app/src/main/java/com/hippo/ehviewer/widget/SearchLayout.java
+++ b/app/src/main/java/com/hippo/ehviewer/widget/SearchLayout.java
@@ -39,7 +39,6 @@ import android.widget.TextView;
import com.hippo.effect.ripple.RippleSalon;
import com.hippo.ehviewer.R;
import com.hippo.ehviewer.data.ListUrlBuilder;
-import com.hippo.util.UiUtils;
import com.hippo.util.ViewUtils;
import com.hippo.widget.FloatLabelEditText;
import com.hippo.widget.FloatingActionButton;
@@ -111,6 +110,7 @@ public class SearchLayout extends FrameLayout implements CompoundButton.OnChecke
private Bitmap mSearchImage;
private int mFabMarginBottomOrigin;
+ private int mSearchPaddingTopOrigin;
private int mSearchPaddingBottomOrigin;
public SearchLayout(Context context) {
@@ -147,21 +147,30 @@ public class SearchLayout extends FrameLayout implements CompoundButton.OnChecke
mFab.setOnClickListener(this);
mFabMarginBottomOrigin = mResources.getDimensionPixelSize(R.dimen.content_fab_margin_bottom);
+ mSearchPaddingTopOrigin = 0;
mSearchPaddingBottomOrigin = mResources.getDimensionPixelSize(R.dimen.content_padding_bottom);
}
+ public void setFitPaddingTop(int fitPaddingTop) {
+ mSearchContainer.setPadding(
+ mSearchContainer.getPaddingLeft(),
+ mSearchPaddingTopOrigin + fitPaddingTop,
+ mSearchContainer.getPaddingRight(),
+ mSearchContainer.getPaddingBottom()
+ );
+ }
+
public void setFitPaddingBottom(int paddingBottom) {
mSearchContainer.setPadding(
mSearchContainer.getPaddingLeft(),
mSearchContainer.getPaddingTop(),
mSearchContainer.getPaddingRight(),
- mSearchPaddingBottomOrigin + paddingBottom);
+ mSearchPaddingBottomOrigin + paddingBottom
+ );
- if (!UiUtils.isTable(mContext)) {
- LayoutParams lp = (LayoutParams) mFab.getLayoutParams();
- lp.bottomMargin = mFabMarginBottomOrigin + paddingBottom;
- mFab.setLayoutParams(lp);
- }
+ LayoutParams lp = (LayoutParams) mFab.getLayoutParams();
+ lp.bottomMargin = mFabMarginBottomOrigin + paddingBottom;
+ mFab.setLayoutParams(lp);
}
public void setHelper(SearhLayoutHelper helper) {
diff --git a/app/src/main/java/com/hippo/scene/Scene.java b/app/src/main/java/com/hippo/scene/Scene.java
index 4d0d6410b..fb351a1f0 100644
--- a/app/src/main/java/com/hippo/scene/Scene.java
+++ b/app/src/main/java/com/hippo/scene/Scene.java
@@ -166,6 +166,13 @@ public abstract class Scene {
}
}
+ /**
+ * return true if it is close or about to close
+ */
+ public boolean isFinishing() {
+ return mState == SCENE_STATE_CLOSE || mState == SCENE_STATE_DESTROY;
+ }
+
public void setBackgroundColor(int bgColor) {
if (mBackgroundColor != bgColor) {
mBackgroundColor = bgColor;
diff --git a/app/src/main/java/com/hippo/scene/SceneManager.java b/app/src/main/java/com/hippo/scene/SceneManager.java
index 93f88a4a8..b7ff81dd1 100644
--- a/app/src/main/java/com/hippo/scene/SceneManager.java
+++ b/app/src/main/java/com/hippo/scene/SceneManager.java
@@ -32,8 +32,6 @@ class SceneManager {
private Scene mLegacyScene;
- private int[] mTemp = new int[2];
-
// Should only be called by SceneApplication
SceneManager() {
}
diff --git a/app/src/main/res/layout-sw600dp/search_category.xml b/app/src/main/res/layout-sw600dp/search_category.xml
deleted file mode 100644
index e1f208f39..000000000
--- a/app/src/main/res/layout-sw600dp/search_category.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout-v21/search_category.xml b/app/src/main/res/layout-v21/search_category.xml
deleted file mode 100644
index b915e2cd4..000000000
--- a/app/src/main/res/layout-v21/search_category.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/scene_gallery_list.xml b/app/src/main/res/layout/scene_gallery_list.xml
index c3c43a625..b9c4aebd6 100644
--- a/app/src/main/res/layout/scene_gallery_list.xml
+++ b/app/src/main/res/layout/scene_gallery_list.xml
@@ -21,6 +21,11 @@
+
+
@@ -29,7 +34,10 @@
android:id="@+id/search_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_margin="8dp"
+ android:layout_marginLeft="@dimen/search_bar_padding_horizontal"
+ android:layout_marginRight="@dimen/search_bar_padding_horizontal"
+ android:layout_marginTop="@dimen/search_bar_padding_vertical"
+ android:layout_marginBottom="@dimen/search_bar_padding_vertical"
auto:forceNoElevation="true"/>
diff --git a/app/src/main/res/layout/search_category.xml b/app/src/main/res/layout/search_category.xml
index a47d2783b..e1f208f39 100644
--- a/app/src/main/res/layout/search_category.xml
+++ b/app/src/main/res/layout/search_category.xml
@@ -13,21 +13,22 @@
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
-
+ android:layout_marginBottom="@dimen/search_category_interval"
+ auto:cardElevation="@dimen/default_elevation">
+ android:paddingBottom="@dimen/search_category_padding_bottom">
+ android:layout_height="0dp"
+ android:layout_weight="1">
+
+
+
+
-
-
-
+
diff --git a/app/src/main/res/layout/widget_content_layout.xml b/app/src/main/res/layout/widget_content_layout.xml
index edec00b9f..7ab42f834 100644
--- a/app/src/main/res/layout/widget_content_layout.xml
+++ b/app/src/main/res/layout/widget_content_layout.xml
@@ -32,14 +32,12 @@
android:orientation="vertical">
+ android:clipToPadding="false"
+ tools:ignore="RtlHardcoded"/>
-
- 56dp
+
+ 16dp
+ 16dp
0dp