From 5364b3a53f6b70919f3b9469ded02bb0ab418e8b Mon Sep 17 00:00:00 2001 From: zhaodongyang <479868299@qq.com> Date: Fri, 27 Aug 2021 09:12:42 +0800 Subject: [PATCH 01/10] fix:DTS2021082610237---modify SDK version to match the IDE version 2.1.0.240 --- build.gradle | 4 ++-- entry/build.gradle | 1 + material-intro-screen/.gitignore | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index ef3f577..d3acac0 100644 --- a/build.gradle +++ b/build.gradle @@ -19,8 +19,8 @@ buildscript { jcenter() } dependencies { - classpath 'com.huawei.ohos:hap:2.4.2.5' - classpath 'com.huawei.ohos:decctest:1.0.0.6' + classpath 'com.huawei.ohos:hap:2.4.2.5' + classpath 'com.huawei.ohos:decctest:1.0.0.6' } } diff --git a/entry/build.gradle b/entry/build.gradle index e6f93aa..3dea7f9 100644 --- a/entry/build.gradle +++ b/entry/build.gradle @@ -10,6 +10,7 @@ ohos { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) implementation project(path: ':material-intro-screen') + // implementation 'io.openharmony.tpc.thirdlib:material-intro-screen:1.0.2' } decc { supportType = ['html', 'xml'] diff --git a/material-intro-screen/.gitignore b/material-intro-screen/.gitignore index 796b96d..62f869a 100644 --- a/material-intro-screen/.gitignore +++ b/material-intro-screen/.gitignore @@ -1 +1,2 @@ /build +upload.gradle -- Gitee From 199ad0889f120e591058d9cfc948c7897b83d4e9 Mon Sep 17 00:00:00 2001 From: zhaodongyang <479868299@qq.com> Date: Fri, 27 Aug 2021 09:19:49 +0800 Subject: [PATCH 02/10] restore code --- .../java/agency/tango/materialintro/slice/CustomSlide.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/entry/src/main/java/agency/tango/materialintro/slice/CustomSlide.java b/entry/src/main/java/agency/tango/materialintro/slice/CustomSlide.java index 547c394..21cdbaa 100644 --- a/entry/src/main/java/agency/tango/materialintro/slice/CustomSlide.java +++ b/entry/src/main/java/agency/tango/materialintro/slice/CustomSlide.java @@ -10,7 +10,7 @@ import ohos.agp.utils.Color; import ohos.app.Context; import agency.tango.materialintro.ResourceTable; -import agency.tango.materialintroscreen.SlideComponet; +import agency.tango.materialintroscreen.SlideView; import agency.tango.materialintroscreen.utils.ElementUtil; @@ -25,7 +25,7 @@ import agency.tango.materialintroscreen.utils.ElementUtil; * @Version: 1.0 */ -public class CustomSlide extends SlideComponet { +public class CustomSlide extends SlideView { private Checkbox checkBox; public CustomSlide(Context context) { -- Gitee From 6df4ce00ca932022ffc38a3602edf0607b619e82 Mon Sep 17 00:00:00 2001 From: zhaodongyang <479868299@qq.com> Date: Fri, 27 Aug 2021 09:22:56 +0800 Subject: [PATCH 03/10] fix:DTS2021082610238---commit missingvariables rename commit --- .../java/agency/tango/materialintro/slice/CustomSlide.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/entry/src/main/java/agency/tango/materialintro/slice/CustomSlide.java b/entry/src/main/java/agency/tango/materialintro/slice/CustomSlide.java index 21cdbaa..547c394 100644 --- a/entry/src/main/java/agency/tango/materialintro/slice/CustomSlide.java +++ b/entry/src/main/java/agency/tango/materialintro/slice/CustomSlide.java @@ -10,7 +10,7 @@ import ohos.agp.utils.Color; import ohos.app.Context; import agency.tango.materialintro.ResourceTable; -import agency.tango.materialintroscreen.SlideView; +import agency.tango.materialintroscreen.SlideComponet; import agency.tango.materialintroscreen.utils.ElementUtil; @@ -25,7 +25,7 @@ import agency.tango.materialintroscreen.utils.ElementUtil; * @Version: 1.0 */ -public class CustomSlide extends SlideView { +public class CustomSlide extends SlideComponet { private Checkbox checkBox; public CustomSlide(Context context) { -- Gitee From 7bcf9dfb4284d4737a0fd1491b440e29c28cdce1 Mon Sep 17 00:00:00 2001 From: zhaodongyang <479868299@qq.com> Date: Fri, 27 Aug 2021 09:38:08 +0800 Subject: [PATCH 04/10] fix:DTS2021082610248---added the missing method onkeydown --- .../slice/MaterialIntroSlice.java | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/slice/MaterialIntroSlice.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/slice/MaterialIntroSlice.java index 582bbfe..48d47d8 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/slice/MaterialIntroSlice.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/slice/MaterialIntroSlice.java @@ -23,6 +23,7 @@ import ohos.eventhandler.EventHandler; import ohos.eventhandler.EventRunner; import ohos.global.resource.NotExistException; import ohos.global.resource.WrongTypeException; +import ohos.multimodalinput.event.KeyEvent; import ohos.rpc.RemoteException; import ohos.utils.LongPlainArray; @@ -627,5 +628,30 @@ public class MaterialIntroSlice extends AbilitySlice { } } - + @Override + public boolean onKeyDown(int keyCode, KeyEvent keyEvent) { + switch (keyCode) { + case KeyEvent.KEY_DPAD_CENTER: + if (messageButtonBehaviours.get(viewPager.getCurrentPage()) != null) { + messageButton.callOnClick(); + } + break; + case KeyEvent.KEY_DPAD_RIGHT: + int position = viewPager.getCurrentPage(); + if (adapter.isLastSlide(position) && adapter.getItem(position).canMoveFurther()) { + performFinish(); + } else if (adapter.shouldLockSlide(position)) { + errorOccurred(adapter.getItem(position)); + } else { + viewPager.moveToNextPage(); + } + break; + case KeyEvent.KEY_DPAD_LEFT: + moveBack(); + break; + default: + return super.onKeyDown(keyCode, keyEvent); + } + return super.onKeyDown(keyCode, keyEvent); + } } -- Gitee From 5d2685eef4c81a3eff78f74622980488cadc117e Mon Sep 17 00:00:00 2001 From: zhaodongyang <479868299@qq.com> Date: Fri, 27 Aug 2021 09:40:05 +0800 Subject: [PATCH 05/10] fix:DTS2021082610247---added the missing method onBackPressed --- .../tango/materialintroscreen/slice/MaterialIntroSlice.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/slice/MaterialIntroSlice.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/slice/MaterialIntroSlice.java index 48d47d8..76c824c 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/slice/MaterialIntroSlice.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/slice/MaterialIntroSlice.java @@ -654,4 +654,9 @@ public class MaterialIntroSlice extends AbilitySlice { } return super.onKeyDown(keyCode, keyEvent); } + + @Override + protected void onBackPressed() { + moveBack(); + } } -- Gitee From 3dda7c5a748bb15cee74341a6810b948bbee366a Mon Sep 17 00:00:00 2001 From: zhaodongyang <479868299@qq.com> Date: Fri, 27 Aug 2021 09:44:06 +0800 Subject: [PATCH 06/10] README.md --- material-intro-screen/README.md | 191 ++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 material-intro-screen/README.md diff --git a/material-intro-screen/README.md b/material-intro-screen/README.md new file mode 100644 index 0000000..453759a --- /dev/null +++ b/material-intro-screen/README.md @@ -0,0 +1,191 @@ +# Material Intro Screen + + +Material intro screen 的设计灵感来自于 [Material Intro] , 它是最好用的material design风格的引导页,可以很方便的自定义各种动画效果. +## Features + - [轻松添加新幻灯片][Intro Slice] + - [定制幻灯片][Custom Slide] + - [视差幻灯片][Parallax Slide] + - 易扩展的API + - TV支持! + - 最好的材料设计!!! + +| [Simple slide][SimpleSlide] | [Custom slide][Custom Slide] | [Permission slide][PermissionSlide] | [Finish slide][FinishSlide] +|:-:|:-:|:-:|:-:| +| ![simple_slide] | ![customer_slide] | ![permission_slide] | ![finish_slide] | + +## 用法 +### 第1步-使用: +#### 方法1-使用har包 +``` +通过library生成har包,添加har包到要集成的libs文件夹内 +在entry的gradle内添加如下代码 +implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) +``` + +#### 方法2-使用implementation依赖 +``` +allprojects{ + repositories{ + mavenCentral() + } +} +implementation 'io.openharmony.tpc.thirdlib:material-intro-screen:1.0.2' +``` + +#### entry运行要求 +``` +通过DevEco studio,并下载SDK +将项目中的build.gradle文件中dependencies→classpath版本改为对应的版本(即你的IDE新建项目中所用的版本) +``` + + + +### 第2步: +#### 首先, 你的 [intro Slice][Intro Slice] 类需要继承 MaterialIntroSlice: +```java +public class IntroSlice extends MaterialIntroSlice +``` +### 第3步: +#### 在 [config][config] 里面设置沉浸式主题等: +```json + { + "orientation": "unspecified", + "name": "agency.tango.materialintro.IntroAbility", + "icon": "$media:icon", + "description": "$string:introability_description", + "label": "$string:app_name", + "type": "page", + "launchType": "standard", + "metaData": { + "customizeData": [ + { + "name": "hwc-theme", + "value": "androidhwext:style/Theme.Emui.NoTitleBar", + "extra": "" + } + ] + } + } +``` +### 第4步: +#### [添加幻灯片:][Intro Slice] +```java + @Override + protected void onStart(Intent intent) { + super.onStart(intent); + if (isFirst) { + enableLastSlideAlphaExitTransition(true); + getBackButtonTranslationWrapper().setEnterTranslation(Component::setAlpha); + addOrganizePage(); + addGoOnPage(); + addCustomPage(); + addPermissionPage(); + addEndPage(); + isFirst = false; + } + } +``` +#### SlideComponet用法的说明: + - ```possiblePermissions``` ⇾ 不强制要求需要授予的权限 + - ```neededPersmissions``` ⇾ 需要获得许可才能从该幻灯片进一步移动的权限 + - ```MessageButtonBehaviour``` ⇾ 仅仅在你需要自定义操作或者button显示文字才会创建新的实例 + +### 第5步: +#### 自定义 Intro Slice: + - ```setSkipButtonVisible()``` ⇾ 在屏幕左下方显示跳过按钮,而不是后退按钮 + - ```hideBackButton()``` ⇾ 隐藏屏幕左下方的返回按钮 + - ```enableLastSlideAlphaExitTransition()``` ⇾ 设置最后一张幻灯片是否以Alpha渐渐透明的效果消失 + +#### 自定义视图动画: + + 你可以为Intro Slice里面的任何控件设置进场、默认、退场位移动画. 因此,你需要为选定的视图控件选取包装器 (例如: ```getNextButtonTranslationWrapper()```) 并在那里设置接口 ```IViewTranslation```的实现类 +```java + getBackButtonTranslationWrapper().setEnterTranslation(Component::setAlpha); +``` +#### 目前提供的包装器 [translation wrappers][TranslationWrapper]: +- ```getNextButtonTranslationWrapper()``` +- ```getBackButtonTranslationWrapper()``` +- ```getPageIndicatorTranslationWrapper()``` +- ```getViewPagerTranslationWrapper()``` +- ```getSkipButtonTranslationWrapper()``` + +## 定制幻灯片 +#### 您只需要扩展SlideComponet并覆盖以下功能就可以实现完全自定义的幻灯片: + - ```backgroundColor()``` + - ```buttonsColor()``` + - ```canMoveFurther()``` (仅当您要阻止用户在执行某些操作之前就无法进一步移动时才需要实现这个方法) + - ```cantMoveFurtherErrorMessage()``` (同上) + +#### 如果要在自定义控件中使用视差,请使用以下视图之一: + - [ParallaxStackLayout][ParallaxStack] + - [ParallaxDirectionalLayout][ParallaxDirectiona] + - [ParallaxDependentLayout][ParallaxDependent] + +#### 并在XML中设置 [zdy:layout_parallaxFactor][ParallaxFactor] 属性: +```xml + + + +``` + + 此处显示了简单SlideComponet中没有的所有功能: [Custom Slide] + + + ## License +``` + MIT License + + Copyright (c) 2016 Tango Agency + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +``` + + + + + + + + +[Custom Slide]: +[Material Intro]: +[simple_slide]: +[customer_slide]: +[permission_slide]: +[finish_slide]: + + + +[Intro Slice]: +[Parallax Slide]: +[PermissionSlide]: +[FinishSlide]: +[SimpleSlide]: +[ParallaxStack]: +[ParallaxDirectiona]: +[ParallaxDependent]: +[ParallaxFactor]: +[config]: +[TranslationWrapper]: -- Gitee From 94796142e2cba79328bcaf2d1c4228380eec1dea Mon Sep 17 00:00:00 2001 From: zhaodongyang <479868299@qq.com> Date: Fri, 27 Aug 2021 09:46:44 +0800 Subject: [PATCH 07/10] fix:DTS2021082610249--- delete the description of tv support from README --- material-intro-screen/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/material-intro-screen/README.md b/material-intro-screen/README.md index 453759a..8d107cf 100644 --- a/material-intro-screen/README.md +++ b/material-intro-screen/README.md @@ -7,7 +7,6 @@ Material intro screen 的设计灵感来自于 [Material Intro] , 它是最好 - [定制幻灯片][Custom Slide] - [视差幻灯片][Parallax Slide] - 易扩展的API - - TV支持! - 最好的材料设计!!! | [Simple slide][SimpleSlide] | [Custom slide][Custom Slide] | [Permission slide][PermissionSlide] | [Finish slide][FinishSlide] -- Gitee From 0b26294f2016fbc41be0085ac94978905f4ac88f Mon Sep 17 00:00:00 2001 From: zhaodongyang <479868299@qq.com> Date: Tue, 31 Aug 2021 11:11:16 +0800 Subject: [PATCH 08/10] fix:DTS2021082610240,DTS2021082610241,DTS2021082610242---add code that demonstrates how to use the Parallax View --- README.md | 4 +- entry/build.gradle | 2 +- entry/src/main/config.json | 56 +++++++++- .../AbilitySliceDemoAbility.java | 13 +++ .../materialintro/ComponentDemoAbility.java | 13 +++ .../materialintro/ComponentDemoAdapter.java | 78 +++++++++++++ .../materialintro/FractionDemoAbility.java | 13 +++ .../tango/materialintro/MainAbility.java | 2 +- .../tango/materialintro/ShowAbility.java | 13 +++ .../agency/tango/materialintro/TestView.java | 57 ++++++++++ .../materialintro/fractions/FractionDemo.java | 58 ++++++++++ .../slice/AbilitySliceDemoAbilitySlice.java | 65 +++++++++++ .../slice/ComponentDemoAbilitySlice.java | 104 ++++++++++++++++++ .../materialintro/slice/CustomSlide.java | 6 +- .../slice/FractionDemoAbilitySlice.java | 31 ++++++ .../tango/materialintro/slice/IntroSlice.java | 10 +- .../materialintro/slice/MainAbilitySlice.java | 21 ++++ .../materialintro/slice/ShowAbilitySlice.java | 49 +++++++++ .../main/resources/base/element/string.json | 56 ++++++++++ .../background_ability_component_demo.xml | 8 ++ .../background_ability_fraction_demo.xml | 8 ++ .../graphic/background_ability_slice_demo.xml | 8 ++ .../base/graphic/background_ability_test2.xml | 8 ++ .../base/layout/ability_component_demo.xml | 15 +++ .../base/layout/ability_fraction_demo.xml | 14 +++ .../resources/base/layout/ability_main.xml | 1 + .../resources/base/layout/ability_show.xml | 44 ++++++++ .../base/layout/ability_slice_demo.xml | 64 +++++++++++ .../base/layout/layout_fraction_demo.xml | 38 +++++++ .../base/layout/layout_test_view.xml | 68 ++++++++++++ .../resources/base/layout/slide_custom.xml | 2 +- .../src/main/resources/en/element/string.json | 16 +++ .../src/main/resources/zh/element/string.json | 16 +++ material-intro-screen/README.md | 4 +- material-intro-screen/build.gradle | 2 +- .../tango/materialintroscreen/AttrString.java | 2 +- ...onet.java => SlideComponentContainer.java} | 14 +-- .../materialintroscreen/SlideViewBuilder.java | 6 +- .../adapter/SlidesAdapter.java | 14 +-- .../MessageButtonBehaviourOnPageSelected.java | 4 +- .../ParallaxScrollListener.java | 8 +- .../parallax/ParallaxAbilitySlice.java | 100 +++++++++++++++++ ...t.java => ParallaxComponentContainer.java} | 31 ++++-- .../parallax/ParallaxFraction.java | 94 ++++++++++++++++ .../slice/MaterialIntroSlice.java | 16 +-- .../resources/base/layout/fragment_slide.xml | 6 +- 46 files changed, 1198 insertions(+), 64 deletions(-) create mode 100644 entry/src/main/java/agency/tango/materialintro/AbilitySliceDemoAbility.java create mode 100644 entry/src/main/java/agency/tango/materialintro/ComponentDemoAbility.java create mode 100644 entry/src/main/java/agency/tango/materialintro/ComponentDemoAdapter.java create mode 100644 entry/src/main/java/agency/tango/materialintro/FractionDemoAbility.java create mode 100644 entry/src/main/java/agency/tango/materialintro/ShowAbility.java create mode 100644 entry/src/main/java/agency/tango/materialintro/TestView.java create mode 100644 entry/src/main/java/agency/tango/materialintro/fractions/FractionDemo.java create mode 100644 entry/src/main/java/agency/tango/materialintro/slice/AbilitySliceDemoAbilitySlice.java create mode 100644 entry/src/main/java/agency/tango/materialintro/slice/ComponentDemoAbilitySlice.java create mode 100644 entry/src/main/java/agency/tango/materialintro/slice/FractionDemoAbilitySlice.java create mode 100644 entry/src/main/java/agency/tango/materialintro/slice/ShowAbilitySlice.java create mode 100644 entry/src/main/resources/base/graphic/background_ability_component_demo.xml create mode 100644 entry/src/main/resources/base/graphic/background_ability_fraction_demo.xml create mode 100644 entry/src/main/resources/base/graphic/background_ability_slice_demo.xml create mode 100644 entry/src/main/resources/base/graphic/background_ability_test2.xml create mode 100644 entry/src/main/resources/base/layout/ability_component_demo.xml create mode 100644 entry/src/main/resources/base/layout/ability_fraction_demo.xml create mode 100644 entry/src/main/resources/base/layout/ability_show.xml create mode 100644 entry/src/main/resources/base/layout/ability_slice_demo.xml create mode 100644 entry/src/main/resources/base/layout/layout_fraction_demo.xml create mode 100644 entry/src/main/resources/base/layout/layout_test_view.xml create mode 100644 entry/src/main/resources/en/element/string.json create mode 100644 entry/src/main/resources/zh/element/string.json rename material-intro-screen/src/main/java/agency/tango/materialintroscreen/{SlideComponet.java => SlideComponentContainer.java} (95%) create mode 100644 material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxAbilitySlice.java rename material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/{ParallaxComponet.java => ParallaxComponentContainer.java} (72%) create mode 100644 material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxFraction.java diff --git a/README.md b/README.md index 453759a..77e4b1d 100644 --- a/README.md +++ b/README.md @@ -122,7 +122,7 @@ public class IntroSlice extends MaterialIntroSlice - [ParallaxDirectionalLayout][ParallaxDirectiona] - [ParallaxDependentLayout][ParallaxDependent] -#### 并在XML中设置 [zdy:layout_parallaxFactor][ParallaxFactor] 属性: +#### 并在XML中设置 [zdy:layout_parallax_Factor][ParallaxFactor] 属性: ```xml ``` diff --git a/entry/build.gradle b/entry/build.gradle index 3dea7f9..4bd6611 100644 --- a/entry/build.gradle +++ b/entry/build.gradle @@ -10,7 +10,7 @@ ohos { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.har']) implementation project(path: ':material-intro-screen') - // implementation 'io.openharmony.tpc.thirdlib:material-intro-screen:1.0.2' + // implementation 'io.openharmony.tpc.thirdlib:material-intro-screen:1.0.2' } decc { supportType = ['html', 'xml'] diff --git a/entry/src/main/config.json b/entry/src/main/config.json index c778423..d32d3e9 100644 --- a/entry/src/main/config.json +++ b/entry/src/main/config.json @@ -3,7 +3,7 @@ "bundleName": "agency.tango.materialintro", "vendor": "tango", "version": { - "code": 1, + "code": 1000000, "name": "1.0" }, "apiVersion": { @@ -21,7 +21,8 @@ "distro": { "deliveryWithInstall": true, "moduleName": "entry", - "moduleType": "entry" + "moduleType": "entry", + "installationFree": false }, "abilities": [ { @@ -89,6 +90,55 @@ "label": "$string:app_name", "type": "page", "launchType": "standard" + }, + { + "orientation": "unspecified", + "visible": true, + "name": "agency.tango.materialintro.ShowAbility", + "icon": "$media:icon", + "description": "$string:mainability_description", + "label": "$string:parallaxdemo_MainAbility", + "type": "page", + "launchType": "standard" + }, + { + "orientation": "unspecified", + "visible": true, + "name": "agency.tango.materialintro.ComponentDemoAbility", + "icon": "$media:icon", + "description": "$string:componentdemoability_description", + "label": "$string:parallaxdemo_ComponentDemoAbility", + "type": "page", + "launchType": "standard" + }, + { + "orientation": "unspecified", + "visible": true, + "name": "agency.tango.materialintro.AbilitySliceDemoAbility", + "icon": "$media:icon", + "description": "$string:abilityslicedemoability_description", + "label": "$string:parallaxdemo_AbilitySliceDemoAbility", + "type": "page", + "launchType": "standard" + }, + { + "orientation": "unspecified", + "visible": true, + "name": "agency.tango.materialintro.FractionDemoAbility", + "icon": "$media:icon", + "description": "$string:fractiondemoability_description", + "label": "$string:parallaxdemo_FractionDemoAbility", + "type": "page", + "launchType": "standard" + }, + { + "orientation": "unspecified", + "name": "test.aa.TestAbility2", + "icon": "$media:icon", + "description": "$string:testability2_description", + "label": "$string:entry_TestAbility2", + "type": "page", + "launchType": "standard" } ], "reqPermissions": [ @@ -102,7 +152,7 @@ ] } }, - { + { "name": "ohos.permission.GET_WIFI_INFO", "reason": "read storage", "usedScene": { diff --git a/entry/src/main/java/agency/tango/materialintro/AbilitySliceDemoAbility.java b/entry/src/main/java/agency/tango/materialintro/AbilitySliceDemoAbility.java new file mode 100644 index 0000000..bdc2e29 --- /dev/null +++ b/entry/src/main/java/agency/tango/materialintro/AbilitySliceDemoAbility.java @@ -0,0 +1,13 @@ +package agency.tango.materialintro; + +import agency.tango.materialintro.slice.AbilitySliceDemoAbilitySlice; +import ohos.aafwk.ability.Ability; +import ohos.aafwk.content.Intent; + +public class AbilitySliceDemoAbility extends Ability { + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setMainRoute(AbilitySliceDemoAbilitySlice.class.getName()); + } +} diff --git a/entry/src/main/java/agency/tango/materialintro/ComponentDemoAbility.java b/entry/src/main/java/agency/tango/materialintro/ComponentDemoAbility.java new file mode 100644 index 0000000..7c0dc77 --- /dev/null +++ b/entry/src/main/java/agency/tango/materialintro/ComponentDemoAbility.java @@ -0,0 +1,13 @@ +package agency.tango.materialintro; + +import agency.tango.materialintro.slice.ComponentDemoAbilitySlice; +import ohos.aafwk.ability.Ability; +import ohos.aafwk.content.Intent; + +public class ComponentDemoAbility extends Ability { + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setMainRoute(ComponentDemoAbilitySlice.class.getName()); + } +} diff --git a/entry/src/main/java/agency/tango/materialintro/ComponentDemoAdapter.java b/entry/src/main/java/agency/tango/materialintro/ComponentDemoAdapter.java new file mode 100644 index 0000000..af304a6 --- /dev/null +++ b/entry/src/main/java/agency/tango/materialintro/ComponentDemoAdapter.java @@ -0,0 +1,78 @@ +package agency.tango.materialintro; + +import ohos.agp.components.Component; +import ohos.agp.components.ComponentContainer; +import ohos.agp.components.PageSliderProvider; +import ohos.app.Context; + +import java.util.ArrayList; +import java.util.List; + +public class ComponentDemoAdapter extends PageSliderProvider { + private Context context; + private List views; + + public ComponentDemoAdapter(Context context) { + this.context = context; + this.views = new ArrayList<>(); + } + + @Override + public int getCount() { + return this.views == null ? 0 : this.views.size(); + } + + @Override + public Object createPageInContainer(ComponentContainer componentContainer, int position) { + TestView view; + ComponentContainer.LayoutConfig config = new ComponentContainer.LayoutConfig + (ComponentContainer.LayoutConfig.MATCH_PARENT, ComponentContainer.LayoutConfig.MATCH_PARENT); + if (this.views != null && this.views.size() > position) { + view = this.views.get(position); + if (view != null && view.getRootView() != null) { + componentContainer.addComponent(view.getRootView(), config); + views.set(position, view); + return view.getRootView(); + } + } + view = this.getItem(position); + while (this.views.size() <= position) { + this.views.add(null); + } + this.views.set(position, view); + if (view == null && view.getRootView() != null) { + componentContainer.addComponent(view.getRootView(), config); + return view.getRootView(); + } else { + return new Component(componentContainer.getContext()); + } + + } + + @Override + public void destroyPageFromContainer(ComponentContainer componentContainer, int position, Object obj) { + if (obj instanceof Component && componentContainer != null) { + componentContainer.removeComponent((Component) obj); + } + } + + @Override + public boolean isPageMatchToObject(Component component, Object o) { + return component == o; + } + + public TestView getItem(int position) { + if (this.views == null || position < 0 || position >= views.size() || views.get(position) == null) { + return null; + } + return views.get(position); + } + + public void addItem(TestView view) { + if (this.views == null || view == null) { + return; + } + views.add(getCount(), view); + notifyDataChanged(); + } +} diff --git a/entry/src/main/java/agency/tango/materialintro/FractionDemoAbility.java b/entry/src/main/java/agency/tango/materialintro/FractionDemoAbility.java new file mode 100644 index 0000000..db52109 --- /dev/null +++ b/entry/src/main/java/agency/tango/materialintro/FractionDemoAbility.java @@ -0,0 +1,13 @@ +package agency.tango.materialintro; + +import agency.tango.materialintro.slice.FractionDemoAbilitySlice; +import ohos.aafwk.ability.fraction.FractionAbility; +import ohos.aafwk.content.Intent; + +public class FractionDemoAbility extends FractionAbility { + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setMainRoute(FractionDemoAbilitySlice.class.getName()); + } +} diff --git a/entry/src/main/java/agency/tango/materialintro/MainAbility.java b/entry/src/main/java/agency/tango/materialintro/MainAbility.java index 644f69b..9adbc75 100644 --- a/entry/src/main/java/agency/tango/materialintro/MainAbility.java +++ b/entry/src/main/java/agency/tango/materialintro/MainAbility.java @@ -34,6 +34,6 @@ public class MainAbility extends Ability { @Override public void onStart(Intent intent) { super.onStart(intent); - super.setMainRoute(MainAbilitySlice.class.getName()); + setMainRoute(MainAbilitySlice.class.getName()); } } diff --git a/entry/src/main/java/agency/tango/materialintro/ShowAbility.java b/entry/src/main/java/agency/tango/materialintro/ShowAbility.java new file mode 100644 index 0000000..0b54df3 --- /dev/null +++ b/entry/src/main/java/agency/tango/materialintro/ShowAbility.java @@ -0,0 +1,13 @@ +package agency.tango.materialintro; + +import agency.tango.materialintro.slice.ShowAbilitySlice; +import ohos.aafwk.ability.Ability; +import ohos.aafwk.content.Intent; + +public class ShowAbility extends Ability { + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setMainRoute(ShowAbilitySlice.class.getName()); + } +} diff --git a/entry/src/main/java/agency/tango/materialintro/TestView.java b/entry/src/main/java/agency/tango/materialintro/TestView.java new file mode 100644 index 0000000..e8d2021 --- /dev/null +++ b/entry/src/main/java/agency/tango/materialintro/TestView.java @@ -0,0 +1,57 @@ +package agency.tango.materialintro; + +import agency.tango.materialintroscreen.parallax.ParallaxComponentContainer; +import ohos.agp.components.AttrSet; +import ohos.agp.components.Component; +import ohos.agp.components.LayoutScatter; +import ohos.agp.components.Text; +import ohos.app.Context; +import org.jetbrains.annotations.NotNull; +import agency.tango.materialintro.ResourceTable; + +public class TestView extends ParallaxComponentContainer { + + private int index; + private Text mTv; + + public TestView(Context context, int index) { + super(context); + this.index = index; + setPageNum(); + } + + private void setPageNum() { + if (mTv != null) { + mTv.setText("this is page-" + index); + } + } + + public TestView(Context context, AttrSet attrSet, int index) { + super(context, attrSet); + this.index = index; + setPageNum(); + } + + public TestView(Context context, AttrSet attrSet, String styleName, int index) { + super(context, attrSet, styleName); + this.index = index; + setPageNum(); + } + + @Override + protected void initView() { + if (mContext == null || mContext.get() == null) { + return; + } + mRootView = LayoutScatter.getInstance(mContext.get()).parse(ResourceTable.Layout_layout_test_view, null, false); + if (mRootView == null) { + return; + } + mTv = (Text) mRootView.findComponentById(ResourceTable.Id_txt_title); + } + + @Override + public @NotNull Component getRootView() { + return mRootView; + } +} diff --git a/entry/src/main/java/agency/tango/materialintro/fractions/FractionDemo.java b/entry/src/main/java/agency/tango/materialintro/fractions/FractionDemo.java new file mode 100644 index 0000000..e3ea39a --- /dev/null +++ b/entry/src/main/java/agency/tango/materialintro/fractions/FractionDemo.java @@ -0,0 +1,58 @@ +package agency.tango.materialintro.fractions; + +import agency.tango.materialintroscreen.parallax.ParallaxFraction; +import agency.tango.materialintro.ResourceTable; +import ohos.aafwk.content.Intent; +import ohos.agp.components.Component; +import ohos.agp.components.ComponentContainer; +import ohos.agp.components.LayoutScatter; +import ohos.multimodalinput.event.TouchEvent; + +public class FractionDemo extends ParallaxFraction { + private float originStartX = 0; + private float tempX = 0; + + @Override + protected Component initView(LayoutScatter scatter, ComponentContainer container, Intent intent) { + if (scatter == null || container == null || intent == null) { + return null; + } + Component root = scatter.parse(ResourceTable.Layout_layout_fraction_demo, container, false); + if (root == null) { + return null; + } + Component thisContainer = root.findComponentById(ResourceTable.Id_container); + thisContainer.setTouchEventListener(new Component.TouchEventListener() { + @Override + public boolean onTouchEvent(Component component, TouchEvent touchEvent) { + int width = thisContainer.getWidth(); + if (width <= 0) { + return false; + } + int action = touchEvent.getAction(); + if (action == TouchEvent.PRIMARY_POINT_DOWN) { + originStartX = touchEvent.getPointerScreenPosition(0).getX(); + } else if (action == TouchEvent.POINT_MOVE) { + tempX = touchEvent.getPointerScreenPosition(0).getX(); + float offset = (tempX - originStartX) / width; + setOffset(offset); + } else if (action == TouchEvent.PRIMARY_POINT_UP) { + originStartX = 0; + tempX = 0; + setOffset(0); + } else if (action == TouchEvent.POINT_MOVE) { + originStartX = 0; + tempX = 0; + setOffset(0); + } + return true; + } + }); + return root; + } + + @Override + public Component getComponent() { + return mRootView; + } +} diff --git a/entry/src/main/java/agency/tango/materialintro/slice/AbilitySliceDemoAbilitySlice.java b/entry/src/main/java/agency/tango/materialintro/slice/AbilitySliceDemoAbilitySlice.java new file mode 100644 index 0000000..59f4f31 --- /dev/null +++ b/entry/src/main/java/agency/tango/materialintro/slice/AbilitySliceDemoAbilitySlice.java @@ -0,0 +1,65 @@ +package agency.tango.materialintro.slice; + +import agency.tango.materialintroscreen.parallax.ParallaxAbilitySlice; +import agency.tango.materialintro.ResourceTable; +import ohos.aafwk.content.Intent; +import ohos.agp.components.Button; +import ohos.agp.components.Component; +import org.jetbrains.annotations.NotNull; + +public class AbilitySliceDemoAbilitySlice extends ParallaxAbilitySlice { + private float offset = 0.0f; + + @Override + protected int getLayoutId() { + return ResourceTable.Layout_ability_slice_demo; + } + + @Override + protected void initView() { + try { + mRootView = findComponentById(ResourceTable.Id_container); + Button btAdd = (Button) findComponentById(ResourceTable.Id_bt_plus); + Button btReduce = (Button) findComponentById(ResourceTable.Id_bt_minus); + Button btClear = (Button) findComponentById(ResourceTable.Id_bt_clear); + btAdd.setClickedListener(component -> addOffset()); + btReduce.setClickedListener(component -> reducceOffset()); + btClear.setClickedListener(component -> clearOffset()); + } catch (Exception e) { + } + } + + private void clearOffset() { + offset = 0.0f; + setOffset(offset); + } + + private void reducceOffset() { + if (offset >= 0.1f) { + offset -= 0.1f; + setOffset(offset); + } + } + + private void addOffset() { + if (offset <= 0.9f) { + offset += 0.1f; + setOffset(offset); + } + } + + @Override + protected @NotNull Component getRootView() { + return mRootView; + } + + @Override + public void onActive() { + super.onActive(); + } + + @Override + public void onForeground(Intent intent) { + super.onForeground(intent); + } +} diff --git a/entry/src/main/java/agency/tango/materialintro/slice/ComponentDemoAbilitySlice.java b/entry/src/main/java/agency/tango/materialintro/slice/ComponentDemoAbilitySlice.java new file mode 100644 index 0000000..5e545eb --- /dev/null +++ b/entry/src/main/java/agency/tango/materialintro/slice/ComponentDemoAbilitySlice.java @@ -0,0 +1,104 @@ +package agency.tango.materialintro.slice; + +import agency.tango.materialintro.ComponentDemoAdapter; +import agency.tango.materialintro.ResourceTable; +import agency.tango.materialintro.TestView; +import ohos.aafwk.ability.AbilitySlice; +import ohos.aafwk.content.Intent; +import ohos.agp.components.PageSlider; + +public class ComponentDemoAbilitySlice extends AbilitySlice { + + private ComponentDemoAdapter adapter; + + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setUIContent(ResourceTable.Layout_ability_component_demo); + initView(); + } + + private void initView() { + PageSlider viewPager = (PageSlider) findComponentById(ResourceTable.Id_viewPager); + viewPager.addPageChangedListener(new PageSlider.PageChangedListener() { + @Override + public void onPageSliding(int position, float positionOffset, int positionOffsetPixels) { + System.out.println("测试打印===onPageSliding===1" ); + int tempPosition = position; + float tempPositionOffset = positionOffset; + if (adapter == null) { + return; + } + System.out.println("测试打印===onPageSliding===2" ); + float width = (float) viewPager.getWidth(); + int currentPage = viewPager.getCurrentPage(); + float scrollX = 0f; + if (currentPage >= 0 && currentPage < adapter.getCount() + && adapter.getItem(currentPage) != null + && adapter.getItem(currentPage).getRootView() != null) { + float parentLeft = (float) viewPager.getLocationOnScreen()[0]; + float itemX = (float) adapter.getItem(currentPage).getRootView().getLocationOnScreen()[0]; + scrollX = itemX - parentLeft; + } + System.out.println("测试打印===onPageSliding===3" ); + if (width > 0) { + if (scrollX <= 0f) { + tempPosition = currentPage; + tempPositionOffset = Math.abs(scrollX) / Math.abs(width); + } else { + tempPosition = currentPage - 1; + tempPositionOffset = 1 - (Math.abs(scrollX) / Math.abs(width)); + } + } + if (tempPosition >= adapter.getCount()) { + tempPosition = adapter.getCount() - 1; + } + if (tempPosition < 0) { + tempPosition = 0; + } + if (tempPositionOffset < 0) { + tempPositionOffset = 0; + } + if (tempPositionOffset > 1) { + tempPositionOffset = 1; + } + System.out.println("测试打印===onPageSliding===4" ); + if (scrollX <= 0f) { + adapter.getItem(viewPager.getCurrentPage()).setOffset(tempPositionOffset); + } else { + adapter.getItem(viewPager.getCurrentPage()).setOffset(tempPositionOffset - 1); + } + System.out.println("测试打印===onPageSliding===5" ); + } + + @Override + public void onPageSlideStateChanged(int i) { + + } + + @Override + public void onPageChosen(int i) { + adapter.getItem(viewPager.getCurrentPage()).setOffset(0); + adapter.getItem(i).setOffset(0); + } + }); + adapter = new ComponentDemoAdapter(getContext()); + viewPager.setProvider(adapter); + adapter.addItem(new TestView(getContext(), 0)); + adapter.addItem(new TestView(getContext(), 1)); + adapter.addItem(new TestView(getContext(), 2)); + adapter.addItem(new TestView(getContext(), 3)); + adapter.addItem(new TestView(getContext(), 4)); + adapter.addItem(new TestView(getContext(), 5)); + } + + @Override + public void onActive() { + super.onActive(); + } + + @Override + public void onForeground(Intent intent) { + super.onForeground(intent); + } +} diff --git a/entry/src/main/java/agency/tango/materialintro/slice/CustomSlide.java b/entry/src/main/java/agency/tango/materialintro/slice/CustomSlide.java index 547c394..eef9fa9 100644 --- a/entry/src/main/java/agency/tango/materialintro/slice/CustomSlide.java +++ b/entry/src/main/java/agency/tango/materialintro/slice/CustomSlide.java @@ -1,7 +1,5 @@ package agency.tango.materialintro.slice; -import static ohos.agp.components.Component.AXIS_Y; - import ohos.agp.components.Checkbox; import ohos.agp.components.Component; import ohos.agp.components.LayoutScatter; @@ -10,7 +8,7 @@ import ohos.agp.utils.Color; import ohos.app.Context; import agency.tango.materialintro.ResourceTable; -import agency.tango.materialintroscreen.SlideComponet; +import agency.tango.materialintroscreen.SlideComponentContainer; import agency.tango.materialintroscreen.utils.ElementUtil; @@ -25,7 +23,7 @@ import agency.tango.materialintroscreen.utils.ElementUtil; * @Version: 1.0 */ -public class CustomSlide extends SlideComponet { +public class CustomSlide extends SlideComponentContainer { private Checkbox checkBox; public CustomSlide(Context context) { diff --git a/entry/src/main/java/agency/tango/materialintro/slice/FractionDemoAbilitySlice.java b/entry/src/main/java/agency/tango/materialintro/slice/FractionDemoAbilitySlice.java new file mode 100644 index 0000000..71e487e --- /dev/null +++ b/entry/src/main/java/agency/tango/materialintro/slice/FractionDemoAbilitySlice.java @@ -0,0 +1,31 @@ +package agency.tango.materialintro.slice; + +import agency.tango.materialintro.ResourceTable; +import agency.tango.materialintro.fractions.FractionDemo; +import ohos.aafwk.ability.AbilitySlice; +import ohos.aafwk.ability.fraction.FractionAbility; +import ohos.aafwk.content.Intent; + +public class FractionDemoAbilitySlice extends AbilitySlice { + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setUIContent(ResourceTable.Layout_ability_fraction_demo); + initView(); + } + + private void initView() { + ((FractionAbility) getAbility()).getFractionManager() + .startFractionScheduler().add(ResourceTable.Id_fragment_container, new FractionDemo()).submit(); + } + + @Override + public void onActive() { + super.onActive(); + } + + @Override + public void onForeground(Intent intent) { + super.onForeground(intent); + } +} 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 3398e4c..0ca9567 100644 --- a/entry/src/main/java/agency/tango/materialintro/slice/IntroSlice.java +++ b/entry/src/main/java/agency/tango/materialintro/slice/IntroSlice.java @@ -1,5 +1,6 @@ package agency.tango.materialintro.slice; +import agency.tango.materialintroscreen.SlideComponentContainer; import ohos.aafwk.content.Intent; import ohos.aafwk.content.Operation; import ohos.agp.components.Component; @@ -8,7 +9,6 @@ import ohos.security.SystemPermission; import agency.tango.materialintro.ResourceTable; import agency.tango.materialintroscreen.MessageButtonBehaviour; import agency.tango.materialintroscreen.SlideViewBuilder; -import agency.tango.materialintroscreen.SlideComponet; import agency.tango.materialintroscreen.slice.MaterialIntroSlice; import agency.tango.materialintroscreen.utils.ToastUtil; @@ -47,7 +47,7 @@ public class IntroSlice extends MaterialIntroSlice { } private void addEndPage() { - SlideComponet endView = new SlideViewBuilder() + SlideComponentContainer endView = new SlideViewBuilder() .backgroundColor(ResourceTable.Color_fourth_slide_background) .buttonsColor(ResourceTable.Color_fourth_slide_buttons) .title(getContext().getString(ResourceTable.String_end_title)) @@ -62,7 +62,7 @@ public class IntroSlice extends MaterialIntroSlice { String[] neededPermissions = {SystemPermission.CAMERA, SystemPermission.LOCATION, SystemPermission.WRITE_CALENDAR}; - SlideComponet permissionView = new SlideViewBuilder() + SlideComponentContainer permissionView = new SlideViewBuilder() .backgroundColor(ResourceTable.Color_third_slide_background) .buttonsColor(ResourceTable.Color_third_slide_buttons) .possiblePermissions(possiblePermissions) @@ -79,7 +79,7 @@ public class IntroSlice extends MaterialIntroSlice { } private void addGoOnPage() { - SlideComponet goOnView = new SlideViewBuilder() + SlideComponentContainer goOnView = new SlideViewBuilder() .backgroundColor(ResourceTable.Color_second_slide_background) .buttonsColor(ResourceTable.Color_second_slide_buttons) .title(getContext().getString(ResourceTable.String_go_on_title)) @@ -89,7 +89,7 @@ public class IntroSlice extends MaterialIntroSlice { } private void addOrganizePage() { - SlideComponet organizeView = new SlideViewBuilder() + SlideComponentContainer organizeView = new SlideViewBuilder() .backgroundColor(ResourceTable.Color_first_slide_background) .buttonsColor(ResourceTable.Color_first_slide_buttons) .image(ResourceTable.Media_img_office) 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 25daedb..0528ec4 100644 --- a/entry/src/main/java/agency/tango/materialintro/slice/MainAbilitySlice.java +++ b/entry/src/main/java/agency/tango/materialintro/slice/MainAbilitySlice.java @@ -5,6 +5,7 @@ import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.aafwk.content.Operation; import ohos.agp.components.Button; +import ohos.agp.components.Image; import ohos.agp.utils.Color; import agency.tango.materialintro.ResourceTable; @@ -51,6 +52,26 @@ public class MainAbilitySlice extends AbilitySlice { }); getWindow().setStatusBarColor(new Color(ElementUtil.getColor(getContext(), ResourceTable.Color_statusBar_color)).getValue()); + + Image imgJump = + (Image) findComponentById(ResourceTable.Id_img_hide_jump); + imgJump.setClickedListener(component -> { + try { + Intent secondIntent = new Intent(); + // 指定待启动FA的bundleName和abilityName + Operation operation = new Intent.OperationBuilder() + .withDeviceId("") + .withBundleName("agency.tango.materialintro") + .withAbilityName("agency.tango.materialintro.ShowAbility") + .build(); + secondIntent.setOperation(operation); + startAbility(secondIntent); // 通过AbilitySlice的startAbility + } catch (Exception e) { + System.out.println("测试打印===Exception===" + e.toString()); + } + // 接口实现启动另一个页面 + }); + } @Override diff --git a/entry/src/main/java/agency/tango/materialintro/slice/ShowAbilitySlice.java b/entry/src/main/java/agency/tango/materialintro/slice/ShowAbilitySlice.java new file mode 100644 index 0000000..dbc52cd --- /dev/null +++ b/entry/src/main/java/agency/tango/materialintro/slice/ShowAbilitySlice.java @@ -0,0 +1,49 @@ +package agency.tango.materialintro.slice; + +import agency.tango.materialintro.ResourceTable; +import ohos.aafwk.ability.AbilitySlice; +import ohos.aafwk.content.Intent; +import ohos.aafwk.content.Operation; +import ohos.agp.components.Component; + +public class ShowAbilitySlice extends AbilitySlice { + @Override + public void onStart(Intent intent) { + super.onStart(intent); + super.setUIContent(ResourceTable.Layout_ability_show); + initView(); + } + + private void initView() { + jumpToAnotherPage(ResourceTable.Id_bt1, "ComponentDemoAbility"); + jumpToAnotherPage(ResourceTable.Id_bt2, "AbilitySliceDemoAbility"); + jumpToAnotherPage(ResourceTable.Id_bt3, "FractionDemoAbility"); + } + + private void jumpToAnotherPage(int id, String abilityName) { + findComponentById(id).setClickedListener(new Component.ClickedListener() { + @Override + public void onClick(Component component) { + Intent jumpIntent = new Intent(); + Operation operation = new Intent.OperationBuilder() + .withDeviceId("") + .withBundleName("agency.tango.materialintro") + .withAbilityName("agency.tango.materialintro." + abilityName) + .build(); + jumpIntent.setOperation(operation); + startAbility(jumpIntent); + } + }); + + } + + @Override + public void onActive() { + super.onActive(); + } + + @Override + public void onForeground(Intent intent) { + super.onForeground(intent); + } +} diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json index 35b29e3..479e8a6 100644 --- a/entry/src/main/resources/base/element/string.json +++ b/entry/src/main/resources/base/element/string.json @@ -87,6 +87,62 @@ { "name": "close_text", "value": "Try this library in your project! :)" + }, + { + "name": "parallaxdemo_MainAbility", + "value": "parallaxdemo_MainAbility" + }, + { + "name": "mainability_HelloWorld", + "value": "Hello World" + }, + { + "name": "componentdemoability_description", + "value": "Java_Empty Ability" + }, + { + "name": "componentdemoability_HelloWorld", + "value": "Hello World" + }, + { + "name": "parallaxdemo_ComponentDemoAbility", + "value": "parallaxdemo_ComponentDemoAbility" + }, + { + "name": "abilityslicedemoability_description", + "value": "Java_Empty Ability" + }, + { + "name": "abilityslicedemoability_HelloWorld", + "value": "Hello World" + }, + { + "name": "parallaxdemo_AbilitySliceDemoAbility", + "value": "parallaxdemo_AbilitySliceDemoAbility" + }, + { + "name": "fractiondemoability_description", + "value": "Java_Empty Ability" + }, + { + "name": "fractiondemoability_HelloWorld", + "value": "Hello World" + }, + { + "name": "parallaxdemo_FractionDemoAbility", + "value": "parallaxdemo_FractionDemoAbility" + }, + { + "name": "testability2_description", + "value": "Java_Empty Ability" + }, + { + "name": "testability2_HelloWorld", + "value": "Hello World" + }, + { + "name": "entry_TestAbility2", + "value": "entry_TestAbility2" } ] } \ No newline at end of file diff --git a/entry/src/main/resources/base/graphic/background_ability_component_demo.xml b/entry/src/main/resources/base/graphic/background_ability_component_demo.xml new file mode 100644 index 0000000..a002c23 --- /dev/null +++ b/entry/src/main/resources/base/graphic/background_ability_component_demo.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/graphic/background_ability_fraction_demo.xml b/entry/src/main/resources/base/graphic/background_ability_fraction_demo.xml new file mode 100644 index 0000000..a002c23 --- /dev/null +++ b/entry/src/main/resources/base/graphic/background_ability_fraction_demo.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/graphic/background_ability_slice_demo.xml b/entry/src/main/resources/base/graphic/background_ability_slice_demo.xml new file mode 100644 index 0000000..e9a1f38 --- /dev/null +++ b/entry/src/main/resources/base/graphic/background_ability_slice_demo.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/graphic/background_ability_test2.xml b/entry/src/main/resources/base/graphic/background_ability_test2.xml new file mode 100644 index 0000000..a002c23 --- /dev/null +++ b/entry/src/main/resources/base/graphic/background_ability_test2.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/layout/ability_component_demo.xml b/entry/src/main/resources/base/layout/ability_component_demo.xml new file mode 100644 index 0000000..c11c166 --- /dev/null +++ b/entry/src/main/resources/base/layout/ability_component_demo.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/layout/ability_fraction_demo.xml b/entry/src/main/resources/base/layout/ability_fraction_demo.xml new file mode 100644 index 0000000..b32dca7 --- /dev/null +++ b/entry/src/main/resources/base/layout/ability_fraction_demo.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/layout/ability_main.xml b/entry/src/main/resources/base/layout/ability_main.xml index 7c27f0d..a2b3aff 100644 --- a/entry/src/main/resources/base/layout/ability_main.xml +++ b/entry/src/main/resources/base/layout/ability_main.xml @@ -22,6 +22,7 @@ /> + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/layout/ability_slice_demo.xml b/entry/src/main/resources/base/layout/ability_slice_demo.xml new file mode 100644 index 0000000..5ad4ef2 --- /dev/null +++ b/entry/src/main/resources/base/layout/ability_slice_demo.xml @@ -0,0 +1,64 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/layout/layout_fraction_demo.xml b/entry/src/main/resources/base/layout/layout_fraction_demo.xml new file mode 100644 index 0000000..6379ed3 --- /dev/null +++ b/entry/src/main/resources/base/layout/layout_fraction_demo.xml @@ -0,0 +1,38 @@ + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/layout/layout_test_view.xml b/entry/src/main/resources/base/layout/layout_test_view.xml new file mode 100644 index 0000000..17acedf --- /dev/null +++ b/entry/src/main/resources/base/layout/layout_test_view.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/entry/src/main/resources/base/layout/slide_custom.xml b/entry/src/main/resources/base/layout/slide_custom.xml index 93e3801..31c1b48 100644 --- a/entry/src/main/resources/base/layout/slide_custom.xml +++ b/entry/src/main/resources/base/layout/slide_custom.xml @@ -35,7 +35,7 @@ ohos:text="$string:check_to_pass" ohos:text_color="#FFFFFF" ohos:text_size="14fp" - zdy:layout_parallaxFactor="0.4" + zdy:layout_parallax_Factor="0.4" /> diff --git a/entry/src/main/resources/en/element/string.json b/entry/src/main/resources/en/element/string.json new file mode 100644 index 0000000..43c5196 --- /dev/null +++ b/entry/src/main/resources/en/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "entry_TestAbility2", + "value": "entry_TestAbility2" + }, + { + "name": "testability2_description", + "value": "Java_Empty Ability" + }, + { + "name": "testability2_HelloWorld", + "value": "Hello World" + } + ] +} diff --git a/entry/src/main/resources/zh/element/string.json b/entry/src/main/resources/zh/element/string.json new file mode 100644 index 0000000..7cf1800 --- /dev/null +++ b/entry/src/main/resources/zh/element/string.json @@ -0,0 +1,16 @@ +{ + "string": [ + { + "name": "entry_TestAbility2", + "value": "entry_TestAbility2" + }, + { + "name": "testability2_description", + "value": "Java_Empty Ability" + }, + { + "name": "testability2_HelloWorld", + "value": "你好,世界" + } + ] +} \ No newline at end of file diff --git a/material-intro-screen/README.md b/material-intro-screen/README.md index 8d107cf..941deb6 100644 --- a/material-intro-screen/README.md +++ b/material-intro-screen/README.md @@ -121,7 +121,7 @@ public class IntroSlice extends MaterialIntroSlice - [ParallaxDirectionalLayout][ParallaxDirectiona] - [ParallaxDependentLayout][ParallaxDependent] -#### 并在XML中设置 [zdy:layout_parallaxFactor][ParallaxFactor] 属性: +#### 并在XML中设置 [zdy:layout_parallax_Factor][ParallaxFactor] 属性: ```xml ``` diff --git a/material-intro-screen/build.gradle b/material-intro-screen/build.gradle index 5ae1a8d..63bc673 100644 --- a/material-intro-screen/build.gradle +++ b/material-intro-screen/build.gradle @@ -17,5 +17,5 @@ ohos { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'org.jetbrains:annotations:19.0.0' + api 'org.jetbrains:annotations:19.0.0' } diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/AttrString.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/AttrString.java index 376e58b..9d2742f 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/AttrString.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/AttrString.java @@ -31,7 +31,7 @@ public class AttrString { /** * 控件在随着pageslider滑动时的偏移比例 */ - public static final String PARALlAX_LAYOUT_FACTOR = "layout_parallaxFactor"; + public static final String PARALlAX_LAYOUT_FACTOR = "layout_parallax_Factor"; /** * pageslider指示器小圆点直径 diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideComponet.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideComponentContainer.java similarity index 95% rename from material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideComponet.java rename to material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideComponentContainer.java index 2ece3c6..ea1798d 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideComponet.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideComponentContainer.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import agency.tango.materialintroscreen.parallax.ParallaxComponentContainer; import ohos.agp.components.Component; import ohos.agp.components.Image; import ohos.agp.components.LayoutScatter; @@ -17,14 +18,13 @@ import ohos.utils.PacMap; import org.jetbrains.annotations.NotNull; -import agency.tango.materialintroscreen.parallax.ParallaxComponet; import agency.tango.materialintroscreen.utils.LogUtil; /** * @ProjectName: material-intro-screen-master * @Package: agency.tango.materialintroscreen - * @ClassName: SlideComponet + * @ClassName: SlideComponentContainer * @Description: pageslider的item基类 * 封装了背景色的获取及设置 title的文字获取及设置 * messagebutton的背景色获取及设置 description的文字获取及设置 权限的申请及判断 @@ -33,7 +33,7 @@ import agency.tango.materialintroscreen.utils.LogUtil; * @UpdateRemark: 暂无 * @Version: 1.0 */ -public class SlideComponet extends ParallaxComponet { +public class SlideComponentContainer extends ParallaxComponentContainer { private static final String BACKGROUND_COLOR = "background_color"; private static final String BUTTONS_COLOR = "buttons_color"; private static final String TITLE = "title"; @@ -60,7 +60,7 @@ public class SlideComponet extends ParallaxComponet { return title; } - public SlideComponet(Context context) { + public SlideComponentContainer(Context context) { super(context); } @@ -69,9 +69,9 @@ public class SlideComponet extends ParallaxComponet { * * @param builder SlideComponet属性builder * @param context 上下文 - * @return SlideComponet + * @return SlideComponentContainer */ - public static SlideComponet createInstance(SlideViewBuilder builder, Context context) { + public static SlideComponentContainer createInstance(SlideViewBuilder builder, Context context) { BUNDLE.putIntValue(BACKGROUND_COLOR, builder.getBackgroundColor()); BUNDLE.putIntValue(BUTTONS_COLOR, builder.getButtonsColor()); BUNDLE.putIntValue(IMAGE, builder.getImage()); @@ -81,7 +81,7 @@ public class SlideComponet extends ParallaxComponet { builder.getNeededPermissions()); BUNDLE.putStringArray(POSSIBLE_PERMISSIONS, builder.getPossiblePermissions()); - return new SlideComponet(context); + return new SlideComponentContainer(context); } private static boolean isNotNullOrEmpty(String string) { diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideViewBuilder.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideViewBuilder.java index 6fd1a61..4d4ca1a 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideViewBuilder.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/SlideViewBuilder.java @@ -165,10 +165,10 @@ public class SlideViewBuilder { * 构造SlideComponet * * @param context 上下文 - * @return SlideComponet + * @return SlideComponentContainer */ - public SlideComponet build(Context context) { - return SlideComponet.createInstance(this, context); + public SlideComponentContainer build(Context context) { + return SlideComponentContainer.createInstance(this, context); } } diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/adapter/SlidesAdapter.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/adapter/SlidesAdapter.java index 094c061..708949c 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/adapter/SlidesAdapter.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/adapter/SlidesAdapter.java @@ -2,7 +2,7 @@ package agency.tango.materialintroscreen.adapter; import java.util.ArrayList; -import agency.tango.materialintroscreen.SlideComponet; +import agency.tango.materialintroscreen.SlideComponentContainer; import ohos.agp.components.Component; import ohos.agp.components.ComponentContainer; import ohos.agp.components.PageSliderProvider; @@ -24,7 +24,7 @@ import agency.tango.materialintroscreen.SlideViewBuilder; public class SlidesAdapter extends PageSliderProvider { private final DataObservable mObservable = new DataObservable(); private DataObserver mViewPagerObserver; - private ArrayList views = new ArrayList<>(); + private ArrayList views = new ArrayList<>(); /** * 构造器 @@ -41,7 +41,7 @@ public class SlidesAdapter extends PageSliderProvider { this.mViewPagerObserver = mViewPagerObserver; } - public void setViews(ArrayList views) { + public void setViews(ArrayList views) { this.views = views; } @@ -52,7 +52,7 @@ public class SlidesAdapter extends PageSliderProvider { @Override public Object createPageInContainer(ComponentContainer componentContainer, int position) { - SlideComponet slideComponet; + SlideComponentContainer slideComponet; ComponentContainer.LayoutConfig layoutParams = new ComponentContainer.LayoutConfig( ComponentContainer.LayoutConfig.MATCH_PARENT, @@ -126,7 +126,7 @@ public class SlidesAdapter extends PageSliderProvider { * @return 是否应该锁定页面 */ public boolean shouldLockSlide(int position) { - SlideComponet slideComponet = getItem(position); + SlideComponentContainer slideComponet = getItem(position); return !slideComponet.canMoveFurther() || slideComponet.hasNeededPermissionsToGrant(); } @@ -136,7 +136,7 @@ public class SlidesAdapter extends PageSliderProvider { * @param var1 pageslider子控件位置 * @return 某个位置的子控件 */ - public SlideComponet getItem(int var1) { + public SlideComponentContainer getItem(int var1) { if (views == null || var1 < 0 || var1 >= views.size() || views.get(var1) == null) { return new SlideViewBuilder().build(null); } @@ -149,7 +149,7 @@ public class SlidesAdapter extends PageSliderProvider { * * @param view 子控件 */ - public void addItem(SlideComponet view) { + public void addItem(SlideComponentContainer view) { views.add(getCount(), view); notifyDataChanged(); } diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/MessageButtonBehaviourOnPageSelected.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/MessageButtonBehaviourOnPageSelected.java index 2906023..7925809 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/MessageButtonBehaviourOnPageSelected.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/MessageButtonBehaviourOnPageSelected.java @@ -2,7 +2,7 @@ package agency.tango.materialintroscreen.listeners; import java.io.IOException; -import agency.tango.materialintroscreen.SlideComponet; +import agency.tango.materialintroscreen.SlideComponentContainer; import ohos.agp.animation.Animator; import ohos.agp.animation.AnimatorProperty; import ohos.agp.components.Button; @@ -49,7 +49,7 @@ public class MessageButtonBehaviourOnPageSelected implements IPageSelectedListen if (messageButton == null || adapter.getItem(position) == null) { return; } - final SlideComponet slideComponet = adapter.getItem(position); + final SlideComponentContainer slideComponet = adapter.getItem(position); if (slideComponet.hasAnyPermissionsToGrant()) { showMessageButton(); try { diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/scrollListeners/ParallaxScrollListener.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/scrollListeners/ParallaxScrollListener.java index 60a6586..e13413d 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/scrollListeners/ParallaxScrollListener.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/listeners/scrollListeners/ParallaxScrollListener.java @@ -1,6 +1,6 @@ package agency.tango.materialintroscreen.listeners.scrollListeners; -import agency.tango.materialintroscreen.SlideComponet; +import agency.tango.materialintroscreen.SlideComponentContainer; import org.jetbrains.annotations.Nullable; import agency.tango.materialintroscreen.adapter.SlidesAdapter; @@ -31,8 +31,8 @@ public class ParallaxScrollListener implements IPageScrolledListener { return; } if (position != adapter.getCount()) { - SlideComponet view = adapter.getItem(position); - SlideComponet fragmentNext = getNextFragment(position); + SlideComponentContainer view = adapter.getItem(position); + SlideComponentContainer fragmentNext = getNextFragment(position); if (view instanceof Parallaxable) { ((Parallaxable) view).setOffset(offset); } @@ -43,7 +43,7 @@ public class ParallaxScrollListener implements IPageScrolledListener { } @Nullable - private SlideComponet getNextFragment(int position) { + private SlideComponentContainer getNextFragment(int position) { if (adapter == null) { return new SlideViewBuilder().build(null); } diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxAbilitySlice.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxAbilitySlice.java new file mode 100644 index 0000000..02b6870 --- /dev/null +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxAbilitySlice.java @@ -0,0 +1,100 @@ +package agency.tango.materialintroscreen.parallax; + +import agency.tango.materialintroscreen.utils.LogUtil; +import ohos.aafwk.ability.AbilitySlice; +import ohos.aafwk.content.Intent; +import ohos.agp.components.AttrSet; +import ohos.agp.components.Component; +import ohos.agp.components.ComponentContainer; +import ohos.app.Context; +import org.jetbrains.annotations.NotNull; + +import java.lang.ref.WeakReference; +import java.util.LinkedList; +import java.util.Queue; + +/** + * @ProjectName: material-intro-screen-master + * @Package: agency.tango.materialintroscreen.parallax + * @ClassName: ParallaxDependentLayout + * @Description: 视察试图在AbilitySlice中的使用 根据容器内各个子控件在水平方向的位置 随着滑动按比例偏移子控件 + * @CreateDate: 2021/4/12 17:12 + * @UpdateDate: 2021/4/12 17:12 + * @UpdateRemark: 暂无 + * @Version: 1.0 + */ +public abstract class ParallaxAbilitySlice extends AbilitySlice implements Parallaxable { + + /** + * 根节点控件 + */ + protected Component mRootView; + /** + * 视差布局 + */ + protected Parallaxable parallaxLayout; + + public ParallaxAbilitySlice() { + } + + @Override + protected final void onStart(Intent intent) { + super.onStart(intent); + super.setUIContent(getLayoutId()); + initView(); + parallaxLayout = findParallaxLayout(getRootView()); + } + + /** + * 初始化控件 + */ + protected abstract void initView() ; + + /** + * 获取布局ID + * + * @return 布局ID + */ + protected abstract int getLayoutId(); + + + /** + * 获取ParallaxLayout + * + * @param root 根节点控件 + * @return 根节点及其子类里面包含的ParallaxLayout + */ + public Parallaxable findParallaxLayout(Component root) { + Queue queue = new LinkedList<>(); + queue.add(root); + while (!queue.isEmpty()) { + Component child = queue.remove(); + if (child instanceof Parallaxable) { + return (Parallaxable) child; + } else if (child instanceof ComponentContainer) { + ComponentContainer viewGroup = (ComponentContainer) child; + for (int i = viewGroup.getChildCount() - 1; i >= 0; i--) { + queue.add(viewGroup.getComponentAt(i)); + } + } else { + LogUtil.info("ParallaxComponentContainer", "findParallaxLayout"); + } + } + return new ParallaxDirectionalLayout(null); + } + + @Override + public void setOffset(float offset) { + if (parallaxLayout != null) { + parallaxLayout.setOffset(offset); + } + } + + /** + * 获取根控件 + * + * @return 根控件 + */ + protected abstract @NotNull Component getRootView(); + +} diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxComponet.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxComponentContainer.java similarity index 72% rename from material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxComponet.java rename to material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxComponentContainer.java index cdec245..17392d3 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxComponet.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxComponentContainer.java @@ -4,6 +4,7 @@ import java.lang.ref.WeakReference; import java.util.LinkedList; import java.util.Queue; +import ohos.agp.components.AttrSet; import ohos.agp.components.Component; import ohos.agp.components.ComponentContainer; import ohos.app.Context; @@ -16,13 +17,13 @@ import agency.tango.materialintroscreen.utils.LogUtil; * @ProjectName: material-intro-screen-master * @Package: agency.tango.materialintroscreen.parallax * @ClassName: ParallaxDependentLayout - * @Description: 可偏移DependentLayout 根据容器内各个子控件在水平方向的位置 随着滑动按比例偏移子控件 + * @Description: 视察试图在Componet中的使用 根据容器内各个子控件在水平方向的位置 随着滑动按比例偏移子控件 * @CreateDate: 2021/4/12 17:12 * @UpdateDate: 2021/4/12 17:12 * @UpdateRemark: 暂无 * @Version: 1.0 */ -public abstract class ParallaxComponet implements Parallaxable { +public abstract class ParallaxComponentContainer extends ComponentContainer implements Parallaxable { /** * 上下文弱引用 */ @@ -36,7 +37,22 @@ public abstract class ParallaxComponet implements Parallaxable { */ protected Parallaxable parallaxLayout; - public ParallaxComponet(Context context) { + public ParallaxComponentContainer(Context context) { + super(context); + init(context); + } + + public ParallaxComponentContainer(Context context, AttrSet attrSet) { + super(context, attrSet); + init(context); + } + + public ParallaxComponentContainer(Context context, AttrSet attrSet, String styleName) { + super(context, attrSet, styleName); + init(context); + } + + public void init(Context context) { this.mContext = new WeakReference<>(context); initView(); parallaxLayout = findParallaxLayout(getRootView()); @@ -57,9 +73,7 @@ public abstract class ParallaxComponet implements Parallaxable { /** * 初始化控件 */ - protected void initView() { - // do nothing; - } + protected abstract void initView(); /** * 获取ParallaxLayout @@ -80,7 +94,7 @@ public abstract class ParallaxComponet implements Parallaxable { queue.add(viewGroup.getComponentAt(i)); } } else { - LogUtil.info("ParallaxComponet", "findParallaxLayout"); + LogUtil.info("ParallaxComponentContainer", "findParallaxLayout"); } } return new ParallaxDirectionalLayout(null); @@ -98,7 +112,6 @@ public abstract class ParallaxComponet implements Parallaxable { * * @return 根控件 */ - protected abstract @NotNull - Component getRootView(); + public abstract @NotNull Component getRootView(); } diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxFraction.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxFraction.java new file mode 100644 index 0000000..8f678de --- /dev/null +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/parallax/ParallaxFraction.java @@ -0,0 +1,94 @@ +package agency.tango.materialintroscreen.parallax; + +import agency.tango.materialintroscreen.utils.LogUtil; +import ohos.aafwk.ability.fraction.Fraction; +import ohos.aafwk.content.Intent; +import ohos.agp.components.AttrSet; +import ohos.agp.components.Component; +import ohos.agp.components.ComponentContainer; +import ohos.agp.components.LayoutScatter; +import ohos.app.Context; +import org.jetbrains.annotations.NotNull; + +import java.lang.ref.WeakReference; +import java.util.LinkedList; +import java.util.Queue; + +/** + * @ProjectName: material-intro-screen-master + * @Package: agency.tango.materialintroscreen.ParallaxFraction + * @ClassName: ParallaxDependentLayout + * @Description: 视察试图在Fraction中的使用 根据容器内各个子控件在水平方向的位置 随着滑动按比例偏移子控件 + * @CreateDate: 2021/4/12 17:12 + * @UpdateDate: 2021/4/12 17:12 + * @UpdateRemark: 暂无 + * @Version: 1.0 + */ +public abstract class ParallaxFraction extends Fraction implements Parallaxable { + + /** + * 根节点控件 + */ + protected Component mRootView; + /** + * 视差布局 + */ + protected Parallaxable parallaxLayout; + + public ParallaxFraction() { + } + + @Override + protected final Component onComponentAttached(LayoutScatter scatter, ComponentContainer container, Intent intent) { + mRootView = initView(scatter, container, intent); + parallaxLayout = findParallaxLayout(getRootView()); + return mRootView; + } + + /** + * 初始化控件 + */ + protected abstract Component initView(LayoutScatter scatter, ComponentContainer container, Intent intent); + + /** + * 获取ParallaxLayout + * + * @param root 根节点控件 + * @return 根节点及其子类里面包含的ParallaxLayout + */ + public Parallaxable findParallaxLayout(Component root) { + Queue queue = new LinkedList<>(); + queue.add(root); + while (!queue.isEmpty()) { + Component child = queue.remove(); + if (child instanceof Parallaxable) { + return (Parallaxable) child; + } else if (child instanceof ComponentContainer) { + ComponentContainer viewGroup = (ComponentContainer) child; + for (int i = viewGroup.getChildCount() - 1; i >= 0; i--) { + queue.add(viewGroup.getComponentAt(i)); + } + } else { + LogUtil.info("ParallaxComponentContainer", "findParallaxLayout"); + } + } + return new ParallaxDirectionalLayout(null); + } + + @Override + public void setOffset(float offset) { + if (parallaxLayout != null) { + parallaxLayout.setOffset(offset); + } + } + + /** + * 获取根控件 + * + * @return 根控件 + */ + protected @NotNull Component getRootView() { + return mRootView; + } + +} diff --git a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/slice/MaterialIntroSlice.java b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/slice/MaterialIntroSlice.java index 76c824c..90ec4e5 100644 --- a/material-intro-screen/src/main/java/agency/tango/materialintroscreen/slice/MaterialIntroSlice.java +++ b/material-intro-screen/src/main/java/agency/tango/materialintroscreen/slice/MaterialIntroSlice.java @@ -5,7 +5,7 @@ import java.util.concurrent.ConcurrentLinkedDeque; import static ohos.agp.components.Component.VISIBLE; -import agency.tango.materialintroscreen.SlideComponet; +import agency.tango.materialintroscreen.SlideComponentContainer; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.colors.RgbColor; @@ -301,7 +301,7 @@ public class MaterialIntroSlice extends AbilitySlice { * * @param slideFragment Fragment to add */ - public void addSlide(SlideComponet slideFragment) { + public void addSlide(SlideComponentContainer slideFragment) { adapter.addItem(slideFragment); } @@ -311,7 +311,7 @@ public class MaterialIntroSlice extends AbilitySlice { * @param slideFragment Fragment to add * @param messageButtonBehaviour Add behaviour for message button */ - public void addSlide(SlideComponet slideFragment, MessageButtonBehaviour messageButtonBehaviour) { + public void addSlide(SlideComponentContainer slideFragment, MessageButtonBehaviour messageButtonBehaviour) { adapter.addItem(slideFragment); messageButtonBehaviours.put(adapter.getLastItemPosition(), messageButtonBehaviour); @@ -396,7 +396,7 @@ public class MaterialIntroSlice extends AbilitySlice { } } - private void nextButtonBehaviour(final int position, final SlideComponet slideComponet) { + private void nextButtonBehaviour(final int position, final SlideComponentContainer slideComponet) { boolean hasPermissionToGrant = slideComponet.hasNeededPermissionsToGrant(); if (hasPermissionToGrant) { nextButton.setImageElement(new VectorElement(getContext(), @@ -415,7 +415,7 @@ public class MaterialIntroSlice extends AbilitySlice { } } - private void doNextButtonClick(final SlideComponet slideComponet) { + private void doNextButtonClick(final SlideComponentContainer slideComponet) { if (slideComponet.canMoveFurther() == false) { if (System.currentTimeMillis() - nextClickTime <= SNACKBAR_DURATION || (snackBar != null && snackBar.isShow())) { @@ -439,7 +439,7 @@ public class MaterialIntroSlice extends AbilitySlice { return; } clickTime = System.currentTimeMillis(); - SlideComponet slideFragment = + SlideComponentContainer slideFragment = adapter.getItem(adapter.getLastItemPosition()); if (!slideFragment.canMoveFurther()) { errorOccurred(slideFragment); @@ -465,7 +465,7 @@ public class MaterialIntroSlice extends AbilitySlice { return ElementUtil.getColor(getContext(), color); } - private void errorOccurred(SlideComponet slideFragment) { + private void errorOccurred(SlideComponentContainer slideFragment) { nextButtonTranslationWrapper.error(); showError(slideFragment.cantMoveFurtherErrorMessage()); } @@ -563,7 +563,7 @@ public class MaterialIntroSlice extends AbilitySlice { subscriber = new MyCommonEventSubscriber(subscribeInfo); CommonEventManager.subscribeCommonEvent(subscriber); } catch (RemoteException e) { - LogUtil.error("SlideComponet", e.toString()); + LogUtil.error("SlideComponentContainer", e.toString()); } } diff --git a/material-intro-screen/src/main/resources/base/layout/fragment_slide.xml b/material-intro-screen/src/main/resources/base/layout/fragment_slide.xml index acdc1b0..c9e8c7f 100644 --- a/material-intro-screen/src/main/resources/base/layout/fragment_slide.xml +++ b/material-intro-screen/src/main/resources/base/layout/fragment_slide.xml @@ -23,7 +23,7 @@ ohos:right_margin="48vp" ohos:top_margin="48vp" ohos:weight="1" - zdy:layout_parallaxFactor="0.6" + zdy:layout_parallax_Factor="0.6" /> + zdy:layout_parallax_Factor="0.5"/> -- Gitee From a19b932c97d97d003d6d8b7744392c7f541fab04 Mon Sep 17 00:00:00 2001 From: zhaodongyang <479868299@qq.com> Date: Tue, 31 Aug 2021 11:16:25 +0800 Subject: [PATCH 09/10] fix:DTS2021082610240,DTS2021082610241,DTS2021082610242---add code that demonstrates how to use the Parallax View --- .../materialintro/slice/MainAbilitySlice.java | 6 +++--- .../src/main/resources/base/element/string.json | 4 ++++ .../main/resources/base/layout/ability_main.xml | 17 +++++++++++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) 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 0528ec4..48043a9 100644 --- a/entry/src/main/java/agency/tango/materialintro/slice/MainAbilitySlice.java +++ b/entry/src/main/java/agency/tango/materialintro/slice/MainAbilitySlice.java @@ -53,9 +53,9 @@ public class MainAbilitySlice extends AbilitySlice { getWindow().setStatusBarColor(new Color(ElementUtil.getColor(getContext(), ResourceTable.Color_statusBar_color)).getValue()); - Image imgJump = - (Image) findComponentById(ResourceTable.Id_img_hide_jump); - imgJump.setClickedListener(component -> { + Button btJump = + (Button) findComponentById(ResourceTable.Id_btn_show_parallax_demo); + btJump.setClickedListener(component -> { try { Intent secondIntent = new Intent(); // 指定待启动FA的bundleName和abilityName diff --git a/entry/src/main/resources/base/element/string.json b/entry/src/main/resources/base/element/string.json index 479e8a6..86148de 100644 --- a/entry/src/main/resources/base/element/string.json +++ b/entry/src/main/resources/base/element/string.json @@ -28,6 +28,10 @@ "name": "launch_intro_activity", "value": "Launch intro activity" }, + { + "name": "show_demo", + "value": "show how to use parallax" + }, { "name": "introability_description", "value": "Java_Phone_Empty Feature Ability" diff --git a/entry/src/main/resources/base/layout/ability_main.xml b/entry/src/main/resources/base/layout/ability_main.xml index a2b3aff..cc42989 100644 --- a/entry/src/main/resources/base/layout/ability_main.xml +++ b/entry/src/main/resources/base/layout/ability_main.xml @@ -21,6 +21,23 @@ ohos:top_padding="10vp" /> + +