diff --git a/README.md b/README.md index 453759a7085262f301a79be2271cc11fd1c4188e..941deb6aee3ae5004357b0d7ac867ab00b70162b 100644 --- a/README.md +++ b/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] @@ -122,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/build.gradle b/build.gradle index ef3f57778829a3a3db8f688a13cdf9f686af29cb..d3acac0e7587e51db56175b6a9c9af5f87d09312 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 e6f93aad9255dcf6c6abee71a4e0f221d0a5ecd1..4bd661169582ae93dd3957734e250650db01f83d 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/entry/src/main/config.json b/entry/src/main/config.json index c778423c977a7f60bb4e960fbd31ce0e6de5d4d6..d32d3e9f24b70724f719ef0216bd09f8a46b9c9a 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 0000000000000000000000000000000000000000..bdc2e298a897b4f3b95351848dd63a7710246334 --- /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 0000000000000000000000000000000000000000..7c0dc778f9742d9b3ee192d5fbfd2ecf6253ce81 --- /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 0000000000000000000000000000000000000000..af304a63581ce2100791185604e38c8b6143134a --- /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 0000000000000000000000000000000000000000..db52109cf261eab1d9fe113605f625fff47b1342 --- /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 644f69b7087a3d0697edd6cfb17c78b0e642fc7f..9adbc75fe2f058f804418c3a1a213417ae15a4ab 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 0000000000000000000000000000000000000000..0b54df3149848a22874f600100179f765bc3a8c7 --- /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 0000000000000000000000000000000000000000..e8d2021c1094a5e39bf1da4be97d855ea39504b2 --- /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 0000000000000000000000000000000000000000..e3ea39a4590bd475c2a82c88eced98f20c14cd45 --- /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 0000000000000000000000000000000000000000..59f4f311a250c337f43494c0949c3013780feefd --- /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 0000000000000000000000000000000000000000..5e545eb373449b4ab1f43a44ec6ac724742b5ac8 --- /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 547c3941eed80b6005dfb0d5e494a883928bedd5..eef9fa9f8bafead57d448d26496bc549ae06d7b8 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 0000000000000000000000000000000000000000..71e487ed32abb9904b787e928839c1599cc397b0 --- /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 3398e4cbf44b3b1c8e07de1b6fb7ffaa40204d83..0ca9567b3c820f3339621e185c72b1827f98f269 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 25daedbd2c3d164f05daf8396250b1b861f34cfd..48043a90bdf94742234182c68b719103e400a32f 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()); + + Button btJump = + (Button) findComponentById(ResourceTable.Id_btn_show_parallax_demo); + btJump.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 0000000000000000000000000000000000000000..dbc52cd304032995660cd20de931579f5fa5a050 --- /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 35b29e36b9503e6e02d9adeb6dcf487fff94d064..86148def9f8ca7461e648c5aa6585530f96f9018 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" @@ -87,6 +91,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 0000000000000000000000000000000000000000..a002c2353e78af3a15235e00738328ff566bc085 --- /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 0000000000000000000000000000000000000000..a002c2353e78af3a15235e00738328ff566bc085 --- /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 0000000000000000000000000000000000000000..e9a1f38289a2ed5a552d3ecb163b7d519f336d64 --- /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 0000000000000000000000000000000000000000..a002c2353e78af3a15235e00738328ff566bc085 --- /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 0000000000000000000000000000000000000000..c11c16660f89c4d0292b16121563183f36ff09a4 --- /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 0000000000000000000000000000000000000000..b32dca7802bff1619a49942649d2145a34744e3d --- /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 7c27f0d47a41744dc864f459326d3f9f62f765f0..cc429891e8c6031ee8614eb7b16c8f62199b567f 100644 --- a/entry/src/main/resources/base/layout/ability_main.xml +++ b/entry/src/main/resources/base/layout/ability_main.xml @@ -21,7 +21,25 @@ ohos:top_padding="10vp" /> + + + + + + + + \ 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 0000000000000000000000000000000000000000..5ad4ef2281fa4de5c3a26ceda1e6f7aafd8622b8 --- /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 0000000000000000000000000000000000000000..6379ed39928e4ede40a99ebc593fb7c2db56cd8c --- /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 0000000000000000000000000000000000000000..17acedfb4b3b8943f10e79fde90cdff7441854eb --- /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 93e3801f25d8609d3fabfe1eb101d243cdb0e266..31c1b4876514338309eface370230dfd94dea5f1 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 0000000000000000000000000000000000000000..43c5196be94004c309f9709991003bd5b473e827 --- /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 0000000000000000000000000000000000000000..7cf18004015ebf9c48252446cfffacb8970eac55 --- /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/.gitignore b/material-intro-screen/.gitignore index 796b96d1c402326528b4ba3c12ee9d92d0e212e9..5929221689fbeb5bd107160af570bca086a1d784 100644 --- a/material-intro-screen/.gitignore +++ b/material-intro-screen/.gitignore @@ -1 +1,7 @@ /build +upload.gradle +README.md +README.OPENSOURCE +CHANGELOG.md +CONTRIBUTE.md +LICENSE diff --git a/material-intro-screen/build.gradle b/material-intro-screen/build.gradle index 5ae1a8dff3fc3298851184afcb8eddc0778b749c..63bc673266fde520844b920c607751e7efaa1422 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 376e58bc13d438649c60f7474642cea056f9baf4..9d2742f5ab32a2331d22820ea7982147be5cb266 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 2ece3c600f661ac535f3d19df6799f1de47f36fb..ea1798d7726c901663a9bfe0f513911473e61c96 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 6fd1a61466a9a5a2ba6d543ad990808c5bde0b3d..4d4ca1ad676419e49dadbd95ed0d59bcd0544563 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 094c0616482b0987f6299fa737d402cd6375215f..708949c378d706c1943373daa0584cbb482a55ef 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 2906023478cbe0045ae3b19526ec2bee2461e5a0..7925809b0d9f33a9520b46a44fef2494a5b102c4 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 60a6586f020f4d082eda36eced887395faee1b4d..e13413df00041aaeae3fb968d950bcf35bf9e0af 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 0000000000000000000000000000000000000000..02b6870d4d19056a6abf2fe79d323afd58885b6a --- /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 cdec2450192f4889b7d656eb5843a1bd466de57e..17392d3283a820fe72fe8e62f9c7b08f1c17222b 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 0000000000000000000000000000000000000000..8f678de1d31ab70fbaf16b84462920bd1259b0e3 --- /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 582bbfe59e9103978061f11aa88e97e8644b6563..90ec4e55a01fc224ad9c88e7d4349b7c868be3bb 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; @@ -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; @@ -300,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); } @@ -310,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); @@ -395,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(), @@ -414,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())) { @@ -438,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); @@ -464,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()); } @@ -562,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()); } } @@ -627,5 +628,35 @@ 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); + } + @Override + protected void onBackPressed() { + moveBack(); + } } 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 acdc1b009137bcba65e7dabf51190a58c28e6276..c9e8c7fb830eade0ac515cb7b51340fb17e152d1 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"/>