From 4133bb4e7ba4384f3f191191a371a63fd429f49f Mon Sep 17 00:00:00 2001 From: seven332 Date: Sat, 18 Apr 2015 04:06:49 +0800 Subject: [PATCH] Update --- app/src/main/assets/fonts/Slabo.ttf | Bin 0 -> 56088 bytes .../com/hippo/effect/ripple/RippleSalon.java | 1 - .../hippo/ehviewer/ui/ContentActivity.java | 11 +++ .../com/hippo/ehviewer/ui/StartActivity.java | 2 - .../ehviewer/ui/scene/GalleryListScene.java | 11 ++- .../com/hippo/ehviewer/widget/SearchBar.java | 80 ++++++++++++++++++ .../com/hippo/scene/TransitionCurtain.java | 9 +- .../com/hippo/widget/SimpleImageView.java | 76 +++++++++++++++++ .../res/drawable/ic_android_debug_bridge.xml | 41 +++++++++ app/src/main/res/drawable/ic_fab_search.xml | 16 ++-- app/src/main/res/drawable/ic_happy.xml | 16 ++-- app/src/main/res/drawable/ic_menu.xml | 40 +++++++++ app/src/main/res/drawable/ic_sad.xml | 16 ++-- .../main/res/drawable/rounded_rectangle.xml | 25 ++++++ app/src/main/res/layout/activity_content.xml | 6 +- .../main/res/layout/scene_gallery_list.xml | 21 ++++- app/src/main/res/layout/widget_search_bar.xml | 41 +++++---- app/src/main/res/values/dimens.xml | 11 ++- app/src/main/res/values/pathdata.xml | 2 + 19 files changed, 368 insertions(+), 57 deletions(-) create mode 100644 app/src/main/assets/fonts/Slabo.ttf create mode 100644 app/src/main/java/com/hippo/ehviewer/widget/SearchBar.java create mode 100644 app/src/main/java/com/hippo/widget/SimpleImageView.java create mode 100644 app/src/main/res/drawable/ic_android_debug_bridge.xml create mode 100644 app/src/main/res/drawable/ic_menu.xml create mode 100644 app/src/main/res/drawable/rounded_rectangle.xml diff --git a/app/src/main/assets/fonts/Slabo.ttf b/app/src/main/assets/fonts/Slabo.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4d73e0984272afbb19ca01dead670c6b70e49b83 GIT binary patch literal 56088 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 G`~C`CN)EsP literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/hippo/effect/ripple/RippleSalon.java b/app/src/main/java/com/hippo/effect/ripple/RippleSalon.java index 1fb523cf0..4766be02c 100644 --- a/app/src/main/java/com/hippo/effect/ripple/RippleSalon.java +++ b/app/src/main/java/com/hippo/effect/ripple/RippleSalon.java @@ -26,7 +26,6 @@ import android.view.View; import com.hippo.ehviewer.R; import com.hippo.widget.HotspotTouchHelper; - public final class RippleSalon { private static final Drawable MASK = new ColorDrawable(Color.BLACK); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/ContentActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/ContentActivity.java index dfcf877ed..4c66d7182 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/ContentActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/ContentActivity.java @@ -15,11 +15,13 @@ package com.hippo.ehviewer.ui; +import android.annotation.SuppressLint; import android.content.Context; import android.content.res.Resources; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.widget.DrawerLayout; +import android.view.Gravity; import com.hippo.content.VectorContext; import com.hippo.ehviewer.R; @@ -62,4 +64,13 @@ public class ContentActivity extends StageActivity { protected void attachBaseContext(Context newBase) { super.attachBaseContext(VectorContext.wrapContext(newBase)); } + + @SuppressLint("RtlHardcoded") + public void toggleDrawer() { + if (mDrawerLayout.isDrawerOpen(Gravity.LEFT) || mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) { + mDrawerLayout.closeDrawers(); + } else { + mDrawerLayout.openDrawer(Gravity.LEFT); + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/StartActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/StartActivity.java index b41e34aa6..f36e821d4 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/StartActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/StartActivity.java @@ -16,7 +16,6 @@ package com.hippo.ehviewer.ui; import android.content.Intent; -import android.graphics.Typeface; import android.os.Bundle; import android.widget.ImageView; import android.widget.TextView; @@ -37,7 +36,6 @@ public class StartActivity extends AbsActionBarActivity { setContentView(R.layout.activity_start); TextView text = (TextView) findViewById(R.id.text_welcome); - text.setTypeface(Typeface.createFromAsset(getAssets(), "fonts/GloriaHallelujah.ttf")); try { SVG svg = new SVGBuilder().readFromResource(getResources(), R.raw.sad_pandroid).build(); 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 d3cd86166..f249c19f7 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 @@ -23,10 +23,11 @@ import android.view.View; 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.scene.Scene; import com.hippo.scene.TransitionCurtain; -public class GalleryListScene extends Scene { +public class GalleryListScene extends Scene implements SearchBar.Helper{ private final static int PAGE_INDEX_SEARCH = 0; private final static int PAGE_INDEX_LIST = 1; @@ -35,6 +36,7 @@ public class GalleryListScene extends Scene { private ContentActivity mActivity; private Resources mResources; + private SearchBar mSearchBar; private ContentLayout mContentLayout; @Override @@ -45,8 +47,10 @@ public class GalleryListScene extends Scene { mActivity = (ContentActivity) getStageActivity(); mResources = mActivity.getResources(); + mSearchBar = (SearchBar) findViewById(R.id.search_bar); mContentLayout = (ContentLayout) findViewById(R.id.content_layout); + mSearchBar.setHelper(this); mContentLayout.showText("无法连接网络"); View view = getSceneView(); @@ -70,4 +74,9 @@ public class GalleryListScene extends Scene { protected void onGetFitPaddingBottom(int b) { // TODO } + + @Override + public void onClickMenu() { + mActivity.toggleDrawer(); + } } diff --git a/app/src/main/java/com/hippo/ehviewer/widget/SearchBar.java b/app/src/main/java/com/hippo/ehviewer/widget/SearchBar.java new file mode 100644 index 000000000..e9cdaf4bb --- /dev/null +++ b/app/src/main/java/com/hippo/ehviewer/widget/SearchBar.java @@ -0,0 +1,80 @@ +/* + * 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.ehviewer.widget; + +import android.content.Context; +import android.graphics.Typeface; +import android.support.v7.widget.CardView; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.hippo.ehviewer.R; +import com.hippo.util.UiUtils; + +public class SearchBar extends CardView implements View.OnClickListener { + + private View mMenuButton; + private TextView mLogoTextView; + + private Helper mHelper; + + public SearchBar(Context context) { + super(context); + init(context); + } + + public SearchBar(Context context, AttributeSet attrs) { + super(context, attrs); + init(context); + } + + public SearchBar(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context); + } + + private void init(Context context) { + setRadius(UiUtils.dp2pix(context, 2)); + setCardElevation(UiUtils.dp2pix(context, 2)); + + LayoutInflater.from(context).inflate(R.layout.widget_search_bar, this); + mMenuButton = getChildAt(0); + mLogoTextView = (TextView) getChildAt(1); + + mMenuButton.setOnClickListener(this); + mLogoTextView.setTypeface(Typeface.createFromAsset(context.getAssets(), + "fonts/Slabo.ttf")); + } + + public void setHelper(Helper helper) { + mHelper = helper; + } + + @Override + public void onClick(View v) { + if (v == mMenuButton) { + if (mHelper != null) { + mHelper.onClickMenu(); + } + } + } + + public interface Helper { + void onClickMenu(); + } +} diff --git a/app/src/main/java/com/hippo/scene/TransitionCurtain.java b/app/src/main/java/com/hippo/scene/TransitionCurtain.java index 92b280bd2..5368f07ec 100644 --- a/app/src/main/java/com/hippo/scene/TransitionCurtain.java +++ b/app/src/main/java/com/hippo/scene/TransitionCurtain.java @@ -20,7 +20,6 @@ import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.graphics.Bitmap; -import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.support.annotation.NonNull; import android.support.annotation.Nullable; @@ -63,8 +62,8 @@ public class TransitionCurtain extends Curtain { // Handle background int bgColor = enter.getBackgroundColor(); - enter.setBackgroundColor(Color.TRANSPARENT); - + int startBgColor = bgColor & 0xffffff; + enter.setBackgroundColor(startBgColor); ObjectAnimator colorAnim = ObjectAnimator.ofInt(enter, "backgroundColor", bgColor); colorAnim.setEvaluator(ArgbEvaluator.getInstance()); colorAnim.setDuration(ANIMATE_TIME); @@ -235,7 +234,9 @@ public class TransitionCurtain extends Curtain { final Set animatorCollection = new HashSet<>(); // Handle background - ObjectAnimator colorAnim = ObjectAnimator.ofInt(exit, "backgroundColor", Color.TRANSPARENT); + int bgColor = enter.getBackgroundColor(); + int endBgColor = bgColor & 0xffffff; + ObjectAnimator colorAnim = ObjectAnimator.ofInt(exit, "backgroundColor", endBgColor); colorAnim.setEvaluator(ArgbEvaluator.getInstance()); colorAnim.setDuration(ANIMATE_TIME); animatorCollection.add(colorAnim); diff --git a/app/src/main/java/com/hippo/widget/SimpleImageView.java b/app/src/main/java/com/hippo/widget/SimpleImageView.java new file mode 100644 index 000000000..528c9b71a --- /dev/null +++ b/app/src/main/java/com/hippo/widget/SimpleImageView.java @@ -0,0 +1,76 @@ +/* + * 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.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.View; + +public class SimpleImageView extends View { + + private Drawable mDrawable; + + private static final int[] LAYOUT_ATTRS = new int[] { + android.R.attr.src + }; + + public SimpleImageView(Context context, AttributeSet attrs) { + super(context, attrs); + init(context, attrs); + } + + public SimpleImageView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context, attrs); + } + + private void init(Context context, AttributeSet attrs) { + final TypedArray a = context.obtainStyledAttributes(attrs, LAYOUT_ATTRS); + mDrawable = a.getDrawable(0); + a.recycle(); + } + + @Override + protected int getSuggestedMinimumWidth() { + int superMinWidth = super.getSuggestedMinimumWidth(); + return (mDrawable == null) ? superMinWidth : + Math.max(superMinWidth, mDrawable.getMinimumWidth() + getPaddingLeft() + getPaddingRight()); + } + + @Override + protected int getSuggestedMinimumHeight() { + int superMinHeight = super.getSuggestedMinimumHeight(); + return (mDrawable == null) ? superMinHeight : + Math.max(superMinHeight, mDrawable.getMinimumHeight() + getPaddingTop() + getPaddingBottom()); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + int width = right - left; + int height = bottom - top; + mDrawable.setBounds(getPaddingLeft(), getPaddingTop(), + width - getPaddingRight(), height - getPaddingBottom()); + } + + @Override + protected void onDraw(Canvas canvas) { + mDrawable.draw(canvas); + } +} diff --git a/app/src/main/res/drawable/ic_android_debug_bridge.xml b/app/src/main/res/drawable/ic_android_debug_bridge.xml new file mode 100644 index 000000000..94590084a --- /dev/null +++ b/app/src/main/res/drawable/ic_android_debug_bridge.xml @@ -0,0 +1,41 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_fab_search.xml b/app/src/main/res/drawable/ic_fab_search.xml index 464557009..f6bcb6de3 100644 --- a/app/src/main/res/drawable/ic_fab_search.xml +++ b/app/src/main/res/drawable/ic_fab_search.xml @@ -19,15 +19,15 @@ xmlns:auto="http://schemas.android.com/apk/res-auto" tools:targetApi="21" - auto:width="24.0dp" - auto:height="24.0dp" - auto:viewportWidth="24.0" - auto:viewportHeight="24.0" + auto:width="24dp" + auto:height="24dp" + auto:viewportWidth="24" + auto:viewportHeight="24" - android:width="24.0dp" - android:height="24.0dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + + + + + + + diff --git a/app/src/main/res/drawable/ic_sad.xml b/app/src/main/res/drawable/ic_sad.xml index 859c86d42..3c12ae300 100644 --- a/app/src/main/res/drawable/ic_sad.xml +++ b/app/src/main/res/drawable/ic_sad.xml @@ -19,15 +19,15 @@ xmlns:auto="http://schemas.android.com/apk/res-auto" tools:targetApi="21" - auto:width="24.0dp" - auto:height="24.0dp" - auto:viewportWidth="24.0" - auto:viewportHeight="24.0" + auto:width="24dp" + auto:height="24dp" + auto:viewportWidth="24" + auto:viewportHeight="24" - android:width="24.0dp" - android:height="24.0dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + + + + + + + diff --git a/app/src/main/res/layout/activity_content.xml b/app/src/main/res/layout/activity_content.xml index 172da0ae2..0e5a769d7 100644 --- a/app/src/main/res/layout/activity_content.xml +++ b/app/src/main/res/layout/activity_content.xml @@ -15,6 +15,7 @@ --> + android:clickable="true" + tools:ignore="RtlHardcoded"> diff --git a/app/src/main/res/layout/scene_gallery_list.xml b/app/src/main/res/layout/scene_gallery_list.xml index cbf51ac6a..c1d93dae1 100644 --- a/app/src/main/res/layout/scene_gallery_list.xml +++ b/app/src/main/res/layout/scene_gallery_list.xml @@ -13,9 +13,22 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> - + android:layout_height="match_parent"> + + + + + + + diff --git a/app/src/main/res/layout/widget_search_bar.xml b/app/src/main/res/layout/widget_search_bar.xml index 1e553b1b3..43c725ee5 100644 --- a/app/src/main/res/layout/widget_search_bar.xml +++ b/app/src/main/res/layout/widget_search_bar.xml @@ -13,26 +13,33 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> - + xmlns:tools="http://schemas.android.com/tools"> - + + + android:layout_gravity="left|center_vertical" + android:paddingLeft="56dp" + android:text="@string/app_name" + android:textSize="@dimen/text_large" + tools:ignore="RtlHardcoded,RtlSymmetry"/> - + - - - + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 5a1714a0a..6daa13869 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -15,8 +15,6 @@ --> - - 56dp @@ -74,4 +72,13 @@ 60dp 44dp + + 24sp + 22sp + 20sp + 18sp + 16sp + 14sp + 12sp + diff --git a/app/src/main/res/values/pathdata.xml b/app/src/main/res/values/pathdata.xml index 2d912e55a..803770212 100644 --- a/app/src/main/res/values/pathdata.xml +++ b/app/src/main/res/values/pathdata.xml @@ -18,5 +18,7 @@ M20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12M22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12M10,9.5C10,10.3 9.3,11 8.5,11C7.7,11 7,10.3 7,9.5C7,8.7 7.7,8 8.5,8C9.3,8 10,8.7 10,9.5M17,9.5C17,10.3 16.3,11 15.5,11C14.7,11 14,10.3 14,9.5C14,8.7 14.7,8 15.5,8C16.3,8 17,8.7 17,9.5M12,17.23C10.25,17.23 8.71,16.5 7.81,15.42L9.23,14C9.68,14.72 10.75,15.23 12,15.23C13.25,15.23 14.32,14.72 14.77,14L16.19,15.42C15.29,16.5 13.75,17.23 12,17.23Z M20,12A8,8 0 0,0 12,4A8,8 0 0,0 4,12A8,8 0 0,0 12,20A8,8 0 0,0 20,12M22,12A10,10 0 0,1 12,22A10,10 0 0,1 2,12A10,10 0 0,1 12,2A10,10 0 0,1 22,12M15.5,8C16.3,8 17,8.7 17,9.5C17,10.3 16.3,11 15.5,11C14.7,11 14,10.3 14,9.5C14,8.7 14.7,8 15.5,8M10,9.5C10,10.3 9.3,11 8.5,11C7.7,11 7,10.3 7,9.5C7,8.7 7.7,8 8.5,8C9.3,8 10,8.7 10,9.5M12,14C13.75,14 15.29,14.72 16.19,15.81L14.77,17.23C14.32,16.5 13.25,16 12,16C10.75,16 9.68,16.5 9.23,17.23L7.81,15.81C8.71,14.72 10.25,14 12,14Z M9.5,3A6.5,6.5 0 0,1 16,9.5C16,11.11 15.41,12.59 14.44,13.73L14.71,14H15.5L20.5,19L19,20.5L14,15.5V14.71L13.73,14.44C12.59,15.41 11.11,16 9.5,16A6.5,6.5 0 0,1 3,9.5A6.5,6.5 0 0,1 9.5,3M9.5,5C7,5 5,7 5,9.5C5,12 7,14 9.5,14C12,14 14,12 14,9.5C14,7 12,5 9.5,5Z + M3,6H21V8H3V6M3,11H21V13H3V11M3,16H21V18H3V16Z + M15,9A1,1 0 0,1 14,8A1,1 0 0,1 15,7A1,1 0 0,1 16,8A1,1 0 0,1 15,9M9,9A1,1 0 0,1 8,8A1,1 0 0,1 9,7A1,1 0 0,1 10,8A1,1 0 0,1 9,9M16.12,4.37L18.22,2.27L17.4,1.44L15.09,3.75C14.16,3.28 13.11,3 12,3C10.88,3 9.84,3.28 8.91,3.75L6.6,1.44L5.78,2.27L7.88,4.37C6.14,5.64 5,7.68 5,10V11H19V10C19,7.68 17.86,5.64 16.12,4.37M5,16C5,19.86 8.13,23 12,23A7,7 0 0,0 19,16V12H5V16Z