From 6bfe8beb88231d76aa0b77f0a2126859d6882859 Mon Sep 17 00:00:00 2001 From: zhouhaibin8357 <1004695331@qq.com> Date: Mon, 7 Jun 2021 18:40:35 +0800 Subject: [PATCH] 1.Optimize layout display 2.Optimize springback closing effect --- entry/src/main/config.json | 8 +- .../tango/materialintro/slice/IntroSlice.java | 2 +- .../materialintro/slice/MainAbilitySlice.java | 2 + .../slice/SplashAbilitySlice.java | 1 - material-intro-screen/src/main/config.json | 3 +- .../widgets/BottomSnackBar.java | 15 +-- .../widgets/OverScrollViewPager.java | 82 ++++++++++--- .../graphic/message_button_background.xml | 9 ++ .../layout/slice_material_intro_slice.xml | 110 +++++++++--------- 9 files changed, 145 insertions(+), 87 deletions(-) create mode 100644 material-intro-screen/src/main/resources/base/graphic/message_button_background.xml diff --git a/entry/src/main/config.json b/entry/src/main/config.json index 76c5297..44d9c88 100644 --- a/entry/src/main/config.json +++ b/entry/src/main/config.json @@ -8,8 +8,7 @@ }, "apiVersion": { "compatible": 5, - "target": 5, - "releaseType": "Beta1" + "target": 5 } }, "deviceConfig": {}, @@ -42,7 +41,7 @@ "label": "$string:app_name", "type": "page", "visible": false, - "launchType": "standard" + "launchType": "singleton" }, { "orientation": "unspecified", @@ -89,7 +88,6 @@ "description": "$string:splashability_description", "label": "$string:app_name", "type": "page", - "visible": false, "launchType": "standard" } ], @@ -135,7 +133,7 @@ } }, { - "name": "ohos.permission.LOCATION_IN_BACKGROUND", + "name": "ohos.permission.WRITE_CALENDAR", "reason": "location background", "usedScene": { "when": "always", diff --git a/entry/src/main/java/agency/tango/materialintro/slice/IntroSlice.java b/entry/src/main/java/agency/tango/materialintro/slice/IntroSlice.java index f0580ee..28a9703 100644 --- a/entry/src/main/java/agency/tango/materialintro/slice/IntroSlice.java +++ b/entry/src/main/java/agency/tango/materialintro/slice/IntroSlice.java @@ -61,7 +61,7 @@ public class IntroSlice extends MaterialIntroSlice { SystemPermission.GET_WIFI_INFO}; String[] neededPermissions = {SystemPermission.CAMERA, SystemPermission.LOCATION, - SystemPermission.LOCATION_IN_BACKGROUND}; + SystemPermission.WRITE_CALENDAR}; SlideView permissionView = new SlideViewBuilder() .backgroundColor(ResourceTable.Color_third_slide_background) .buttonsColor(ResourceTable.Color_third_slide_buttons) diff --git a/entry/src/main/java/agency/tango/materialintro/slice/MainAbilitySlice.java b/entry/src/main/java/agency/tango/materialintro/slice/MainAbilitySlice.java index 8a358a3..8d3e8e0 100644 --- a/entry/src/main/java/agency/tango/materialintro/slice/MainAbilitySlice.java +++ b/entry/src/main/java/agency/tango/materialintro/slice/MainAbilitySlice.java @@ -15,6 +15,7 @@ package agency.tango.materialintro.slice; +import agency.tango.materialintro.MaterialIntro; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.aafwk.content.Operation; @@ -38,6 +39,7 @@ public class MainAbilitySlice extends AbilitySlice { @Override public void onStart(Intent intent) { super.onStart(intent); + MaterialIntro.setIsFirstOpen(false); super.setUIContent(ResourceTable.Layout_ability_main); } diff --git a/entry/src/main/java/agency/tango/materialintro/slice/SplashAbilitySlice.java b/entry/src/main/java/agency/tango/materialintro/slice/SplashAbilitySlice.java index 05de063..32ea1ef 100644 --- a/entry/src/main/java/agency/tango/materialintro/slice/SplashAbilitySlice.java +++ b/entry/src/main/java/agency/tango/materialintro/slice/SplashAbilitySlice.java @@ -60,7 +60,6 @@ public class SplashAbilitySlice extends AbilitySlice { .build(); secondIntent.setOperation(operation); startAbility(secondIntent); // 通过AbilitySlice的startAbility接口实现启动另一个页面 - MaterialIntro.setIsFirstOpen(false); } else { Intent secondIntent = new Intent(); // 指定待启动FA的bundleName和abilityName diff --git a/material-intro-screen/src/main/config.json b/material-intro-screen/src/main/config.json index 6e4a799..9005609 100644 --- a/material-intro-screen/src/main/config.json +++ b/material-intro-screen/src/main/config.json @@ -8,8 +8,7 @@ }, "apiVersion": { "compatible": 5, - "target": 5, - "releaseType": "Beta1" + "target": 5 } }, "deviceConfig": {}, diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/BottomSnackBar.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/BottomSnackBar.java index 61c97fb..69b1c6c 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/BottomSnackBar.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/BottomSnackBar.java @@ -53,7 +53,7 @@ public class BottomSnackBar extends DirectionalLayout { private Text mTvSnackBar; // 默认BottomSnackBar显示文字控件 private ComponentContainer mRootView; // 当前显示BottomSnackBar页面的最顶层控件 private EventHandler handler; - private boolean isShow=false; + private boolean isShow = false; private BottomSnackBar(Context context, @NotNull Builder builder) { super(context); @@ -62,7 +62,7 @@ public class BottomSnackBar extends DirectionalLayout { } public boolean isShow() { - return isShow; + return isShow; } /** @@ -133,7 +133,7 @@ public class BottomSnackBar extends DirectionalLayout { if (mContext == null || mContext.get() == null || clickView == null) { return; } - if (builder == null || !builder.isNeedShowBar) { + if (builder == null || !builder.isNeedShowBar || isShow) { return; } if (mTvSnackBar != null) { @@ -182,7 +182,7 @@ public class BottomSnackBar extends DirectionalLayout { if (mRootView != null && BottomSnackBar.this.getComponentParent() != null) { mRootView.removeComponent(BottomSnackBar.this); } - isShow=false; + isShow = false; } /** @@ -209,9 +209,9 @@ public class BottomSnackBar extends DirectionalLayout { propertyReverse.setStateChangedListener(new Animator.StateChangedListener() { @Override public void onStart(Animator animator) { - if(!isReverse){ - isShow=true; - } + if (!isReverse) { + isShow = true; + } } @Override @@ -327,6 +327,7 @@ public class BottomSnackBar extends DirectionalLayout { this.duration = duration; return this; } + public long getDuration() { return duration; } diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/OverScrollViewPager.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/OverScrollViewPager.java index 3ed84e3..e39a8b5 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/OverScrollViewPager.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/widgets/OverScrollViewPager.java @@ -1,6 +1,11 @@ package agency.tango.materialintroscreen.widgets; +import agency.tango.materialintroscreen.ResourceTable; +import agency.tango.materialintroscreen.adapter.SlidesAdapter; +import agency.tango.materialintroscreen.interceptor.AccelerateInterpolator; +import agency.tango.materialintroscreen.interceptor.Interpolator; import agency.tango.materialintroscreen.listeners.GiveTouchToParentListener; +import agency.tango.materialintroscreen.listeners.IFinishListener; import ohos.agp.components.AttrSet; import ohos.agp.components.Component; import ohos.agp.components.DependentLayout; @@ -10,12 +15,6 @@ import ohos.eventhandler.EventHandler; import ohos.eventhandler.EventRunner; import ohos.multimodalinput.event.TouchEvent; -import agency.tango.materialintroscreen.adapter.SlidesAdapter; -import agency.tango.materialintroscreen.interceptor.AccelerateInterpolator; -import agency.tango.materialintroscreen.interceptor.Interpolator; -import agency.tango.materialintroscreen.listeners.IFinishListener; -import agency.tango.materialintroscreen.ResourceTable; - /** * @ProjectName: material-intro-screen-master * @Package: agency.tango.materialintroscreen.widgets @@ -88,9 +87,6 @@ public class OverScrollViewPager extends DependentLayout implements Component.To setAlpha(1 - positionOffset); requestChildSliding(); } - if (positionOffset > 0.5f) { - finishListener.doOnFinish(); - } } @Override @@ -99,8 +95,6 @@ public class OverScrollViewPager extends DependentLayout implements Component.To if (positionOffset > 0.5f) { finishOverScrollViewWithAnimation(moveOffset); } else { - setTranslationX(0); - setAlpha(1); resetOverScrollViewWithAnimation(moveOffset); } } @@ -148,6 +142,22 @@ public class OverScrollViewPager extends DependentLayout implements Component.To return false; } + /** + * 将容器的TranslationX回归到初始值 + * 以及alpha同步回归到初始值1 + * + * @param transX 移动偏移量 + * @return 是否可以滑动 + */ + private void transOverScrollView(float transX, float alpha) { + setTranslationX(transX); + if (0 <= alpha && alpha <= 1) { + setAlpha(alpha); + } else { + setAlpha(alpha); + } + } + private void requestChildSliding() { if (swipeableViewPager != null && swipeableViewPager.getOnPageChangeListeners() != null) { for (int i = 0; i < swipeableViewPager.getOnPageChangeListeners().size(); i++) { @@ -198,8 +208,11 @@ public class OverScrollViewPager extends DependentLayout implements Component.To private void resetOverScrollViewWithAnimation(final float currentX) { EventHandler current = new EventHandler(EventRunner.getMainEventRunner()); - current.postTask(new SmoothScrollRunnable((int) currentX, 0, 300, - new AccelerateInterpolator())); + SmoothScrollRunnable task = new SmoothScrollRunnable((int) currentX, 0, 300, + new AccelerateInterpolator()); + task.setFinish(false); + task.setStartTransX(getTranslationX(), 0, getAlpha(), 1); + current.postTask(task); } /** @@ -210,8 +223,10 @@ public class OverScrollViewPager extends DependentLayout implements Component.To private void finishOverScrollViewWithAnimation(float currentX) { EventHandler current = new EventHandler(EventRunner.getMainEventRunner()); - current.postTask(new SmoothScrollRunnable((int) currentX, -getWidth(), 300, - new AccelerateInterpolator())); + SmoothScrollRunnable task = new SmoothScrollRunnable((int) currentX, -getWidth(), 300, + new AccelerateInterpolator()); + task.setFinish(true); + current.postTask(task); } /** @@ -253,6 +268,12 @@ public class OverScrollViewPager extends DependentLayout implements Component.To private long startTime = -1; private int currentPosition = -1; + private float startTransX = -1; + private float endTransX = -1; + private float startAlpha = -1; + private float endAlpha = -1; + private boolean isFinish = false; + SmoothScrollRunnable(int fromPosition, int toPosition, long duration, Interpolator interpolator) { scrollFromPosition = fromPosition; @@ -261,6 +282,31 @@ public class OverScrollViewPager extends DependentLayout implements Component.To this.duration = duration; } + /** + * 设置是否需要关闭页面 + * + * @param finish 是否需要关闭页面 + */ + public void setFinish(boolean finish) { + isFinish = finish; + } + + /** + * 设置回弹的时候TranslationX的初始值 最终值 + * alpha的初始值 最终值,用于将父容器回弹 + * + * @param startTransX TranslationX的初始值 + * @param endTransX TranslationX的最终值 + * @param startAlpha alpha的初始值 + * @param endAlpha alpha的最终值 + */ + public void setStartTransX(float startTransX, float endTransX, float startAlpha, float endAlpha) { + this.startTransX = startTransX; + this.endTransX = endTransX; + this.startAlpha = startAlpha; + this.endAlpha = endAlpha; + } + @Override public void run() { if (startTime == -1) { @@ -269,7 +315,11 @@ public class OverScrollViewPager extends DependentLayout implements Component.To long normalizedTime = (1000 * (System.currentTimeMillis() - startTime)) / duration; normalizedTime = Math.max(Math.min(normalizedTime, 1000), 0); - + if (!isFinish) { + final float delTranX = (endTransX - startTransX) * interpolator.getInterpolation(normalizedTime / 1000f) + startTransX; + final float dealAlpha = (endAlpha - startAlpha) * interpolator.getInterpolation(normalizedTime / 1000f) + startAlpha; + transOverScrollView(delTranX, dealAlpha); + } final int deltaY = Math.round((scrollFromPosition - scrollToPosition) * interpolator.getInterpolation(normalizedTime / 1000f)); diff --git a/material-intro-screen/src/main/resources/base/graphic/message_button_background.xml b/material-intro-screen/src/main/resources/base/graphic/message_button_background.xml new file mode 100644 index 0000000..7199524 --- /dev/null +++ b/material-intro-screen/src/main/resources/base/graphic/message_button_background.xml @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/material-intro-screen/src/main/resources/base/layout/slice_material_intro_slice.xml b/material-intro-screen/src/main/resources/base/layout/slice_material_intro_slice.xml index 2b7a9c6..b59d2a1 100644 --- a/material-intro-screen/src/main/resources/base/layout/slice_material_intro_slice.xml +++ b/material-intro-screen/src/main/resources/base/layout/slice_material_intro_slice.xml @@ -21,14 +21,14 @@ ohos:alignment="horizontal_center" ohos:layout_alignment="bottom" ohos:orientation="vertical" - ohos:top_padding="32vp"> + ohos:bottom_padding="10vp">