前言 :
各位同学大家好 有断时间没有给大家更新文章了具体多久我也记得了。最近还在学习鸿蒙开发, 学到了PageSlider 滑动组件类似安卓里面 viewpager 可以实现 屏幕左右滑动的效果 ,那么废话不多说我们正式开始
准备工作
1 安装鸿蒙开发环境 大家可以看我之前的文章
效果图
具体实现
MainAbility 布局文件
<?xml version="1.0" encoding="UTF-8"?>
<DirectionalLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent"
ohos:background_element="blue"
ohos:orientation="vertical">
<PageSlider
ohos:id="$+id:pager_slider"
ohos:height="0vp"
ohos:width="match_parent"
ohos:background_element="#ffffff"
ohos:weight="1"/>
<RadioContainer
ohos:id="$+id:radio_container"
ohos:height="60vp"
ohos:width="match_parent"
ohos:alignment="horizontal_center"
ohos:orientation="horizontal">
<RadioButton
ohos:height="match_parent"
ohos:width="match_content"
ohos:text_size="20fp"
/>
<RadioButton
ohos:height="match_parent"
ohos:width="match_content"
ohos:text_size="20fp"
/>
</RadioContainer>
</DirectionalLayout>
布局这边是底部写了一个RadioContainer 来处理底部的小圆圈显示影藏效果 上面我们写了一个 PageSlider 组件
具体逻辑代码
- ####初始化控件
radioContainer = (RadioContainer) findComponentById(ResourceTable.Id_radio_container);
((RadioButton) radioContainer.getComponentAt(0)).setChecked(true);
pageSlider = (PageSlider) findComponentById(ResourceTable.Id_pager_slider);
LayoutScatter layoutScatter = LayoutScatter.getInstance(getContext());
DependentLayout dependentLayout1 = (DependentLayout) layoutScatter.parse(ResourceTable.Layout_pageSlider1, null, false);
DependentLayout dependentLayout2 = (DependentLayout) layoutScatter.parse(ResourceTable.Layout_pageSlider2, null, false);
- ####将view装入数组
pageviews = new ArrayList();
pageviews.add(dependentLayout1);
pageviews.add(dependentLayout2);
- 绑定适配器
pageSlider.setProvider(new PageSliderProvider() {
@Override
//获取当前窗体界面数
public int getCount() {
HiLog.info(LOG_LABEL, "--------getCount");
return pageviews.size();
}
//返回一个对象,这个对象表明了PagerAdapter适配器选择哪个对象放在当前的pageviews中
@Override
public Object createPageInContainer(ComponentContainer componentContainer, int i) {
componentContainer.addComponent(pageviews.get(i));
HiLog.info(LOG_LABEL, "--------createPageInContainer");
return pageviews.get(i);
}
//是从ViewGroup中移出当前View
@Override
public void destroyPageFromContainer(ComponentContainer componentContainer, int i, Object o) {
((PageSlider) componentContainer).removeComponent(pageviews.get(i));
HiLog.info(LOG_LABEL, "--------destroyPageFromContainer");
}
//断是否由对象生成界面
@Override
public boolean isPageMatchToObject(Component component, Object o) {
HiLog.info(LOG_LABEL, "--------isPageMatchToObject");
return component == o;
}
});
- pageSlider滑动监听事件
pageSlider.addPageChangedListener(new PageSlider.PageChangedListener() {
@Override
public void onPageSliding(int i, float v, int i1) {
//v:指示页面的位置偏移量。值的范围是(0,1]。
// 0表示正在显示目标页面。
//i1:指示显示页面的位置偏移像素数。
}
@Override
public void onPageSlideStateChanged(int i) {
HiLog.info(LOG_LABEL, "--------onPageSlideStateChanged");
}
@Override
public void onPageChosen(int i) {
((RadioButton) radioContainer.getComponentAt(i)).setChecked(true);
}
});
- 完整代码
package com.example.pagesliderdemo.slice;
import com.example.pagesliderdemo.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.*;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import java.util.ArrayList;
import java.util.List;
public class MainAbilitySlice extends AbilitySlice {
static final HiLogLabel LOG_LABEL = new HiLogLabel(HiLog.LOG_APP, 0x00002, "MainAbilitySlice");
private RadioContainer radioContainer;
private PageSlider pageSlider;
private List pageviews;
@Override
public void onStart(Intent intent) {
HiLog.info(LOG_LABEL, "--------onStart2");
super.onStart(intent);
super.setUIContent(ResourceTable.Layout_ability_main);
radioContainer = (RadioContainer) findComponentById(ResourceTable.Id_radio_container);
((RadioButton) radioContainer.getComponentAt(0)).setChecked(true);
pageSlider = (PageSlider) findComponentById(ResourceTable.Id_pager_slider);
LayoutScatter layoutScatter = LayoutScatter.getInstance(getContext());
DependentLayout dependentLayout1 = (DependentLayout) layoutScatter.parse(ResourceTable.Layout_pageSlider1, null, false);
DependentLayout dependentLayout2 = (DependentLayout) layoutScatter.parse(ResourceTable.Layout_pageSlider2, null, false);
//将view装入数组
pageviews = new ArrayList();
pageviews.add(dependentLayout1);
pageviews.add(dependentLayout2);
//绑定适配器
pageSlider.setProvider(new PageSliderProvider() {
@Override
//获取当前窗体界面数
public int getCount() {
HiLog.info(LOG_LABEL, "--------getCount");
return pageviews.size();
}
//返回一个对象,这个对象表明了PagerAdapter适配器选择哪个对象放在当前的pageviews中
@Override
public Object createPageInContainer(ComponentContainer componentContainer, int i) {
componentContainer.addComponent(pageviews.get(i));
HiLog.info(LOG_LABEL, "--------createPageInContainer");
return pageviews.get(i);
}
//是从ViewGroup中移出当前View
@Override
public void destroyPageFromContainer(ComponentContainer componentContainer, int i, Object o) {
((PageSlider) componentContainer).removeComponent(pageviews.get(i));
HiLog.info(LOG_LABEL, "--------destroyPageFromContainer");
}
//断是否由对象生成界面
@Override
public boolean isPageMatchToObject(Component component, Object o) {
HiLog.info(LOG_LABEL, "--------isPageMatchToObject");
return component == o;
}
});
pageSlider.addPageChangedListener(new PageSlider.PageChangedListener() {
@Override
public void onPageSliding(int i, float v, int i1) {
//v:指示页面的位置偏移量。值的范围是(0,1]。
// 0表示正在显示目标页面。
//i1:指示显示页面的位置偏移像素数。
}
@Override
public void onPageSlideStateChanged(int i) {
HiLog.info(LOG_LABEL, "--------onPageSlideStateChanged");
}
@Override
public void onPageChosen(int i) {
((RadioButton) radioContainer.getComponentAt(i)).setChecked(true);
}
});
radioContainer.setMarkChangedListener((radioContainer, i) -> pageSlider.setCurrentPage(i));
}
}
###另外附上 Layout_pageSlider1 和 Layout_pageSlider2 的布局文件
- pageSlider1.xml
<?xml version="1.0" encoding="utf-8"?>
<DependentLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent">
<Text
ohos:height="match_content"
ohos:width="match_content"
ohos:center_in_parent="true"
ohos:text="PageSlider1"
ohos:text_size="25fp"/>
</DependentLayout>
复制
- pageSlider2.xml
<?xml version="1.0" encoding="utf-8"?>
<DependentLayout
xmlns:ohos="http://schemas.huawei.com/res/ohos"
ohos:height="match_parent"
ohos:width="match_parent">
<Text
ohos:height="match_content"
ohos:width="match_content"
ohos:center_in_parent="true"
ohos:text="PageSlider2"
ohos:text_size="25fp"/>
</DependentLayout>
复制
到此鸿蒙的 PageSlider 滑动组件基本算是讲完了。
最后总结:
鸿蒙里面的 PageSlider 组件对标的是安卓的里面viewpager 做过安卓开发同学应该都比较熟悉 也容易理解 PageSlider 的各种用法包添加view 滑动监听 绑定适配器等等。PageSlider 主要使用来处理横向滑动屏幕的一个效果 可以实现轮播图滑动那种效果。关于轮播图篇幅有限就不展开讲了· 后面再更新 最后希望我的文章能帮助到各位解决问题 ,以后我还会贡献更多有用的代码分享给大家。
文章来源于互联网:鸿蒙 PageSlider 滑动组件基础用法【鸿蒙专题9】
阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=19211,转载请注明出处。
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=19211,转载请注明出处。
评论0