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"/>