鸿蒙开发(16)---PageSliderIndicator组件

简介: 鸿蒙开发(16)---PageSliderIndicator组件

PageSliderIndicator组件


看到这个组件,哪怕学过其他开发,估计也会有点陌生。因为它与前面的PageSlider组件很像。没错,你可以把它想象成一个页面的切换。


同时,也可以把前端swiper组件当成页面的切换,只是其切换的是图或者文字,而PageSlider切换的是界面。PageSliderIndicator等价于前端的swiper组件。


今天,我们就来介绍该组件,并使用其实现一个图片浏览自动切换。


布局文件

首先,我们还是使用XML布局文件进行创建使用。示例代码如下所示:

<?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:orientation="vertical">
    <StackLayout
        ohos:height="match_content"
        ohos:width="match_parent">
        <PageSlider
            ohos:id="$+id:ability_main_pageslider"
            ohos:height="match_content"
            ohos:width="match_parent"/>
        <PageSliderIndicator
            ohos:id="$+id:ability_main_pagesliderindicator"
            ohos:height="match_content"
            ohos:width="match_content"
            ohos:padding="8vp"
            ohos:layout_alignment="bottom"/>
    </StackLayout>
</DirectionalLayout>


我们都知道swiper组件的按钮选项一般与图片重叠,所以这里我们需要用到堆叠布局StackLayout,直接卸载外面会导致一个在另一个下边。


PageSlider图片页面

接着,我们需要通过PageSlider组件的适配器,完成轮换图片的界面。示例代码如下:

public class SwiperPageSliderProvider extends PageSliderProvider {
    private List<ImageSwiper> pixelMapList=new ArrayList<>();
    private AbilitySlice abilitySlice;
    public SwiperPageSliderProvider(List<ImageSwiper> pixelMapList,AbilitySlice abilitySlice) {
        this.pixelMapList=pixelMapList;
        this.abilitySlice=abilitySlice;
    }
    @Override
    public int getCount() {
        return this.pixelMapList == null ? 0 : this.pixelMapList.size();
    }
    @Override
    public Object createPageInContainer(ComponentContainer componentContainer, int i) {
        final ImageSwiper data = this.pixelMapList.get(i);
        Image image = new Image(this.abilitySlice);
        image.setPixelMap(data.resImage);
        image.setLayoutConfig(
                new StackLayout.LayoutConfig(
                        ComponentContainer.LayoutConfig.MATCH_PARENT,
                        ComponentContainer.LayoutConfig.MATCH_PARENT
                ));
        image.setScaleMode(Image.ScaleMode.STRETCH);
        componentContainer.addComponent(image);
        return image;
    }
    @Override
    public void destroyPageFromContainer(ComponentContainer componentContainer, int i, Object o) {
        componentContainer.removeComponent((Component) o);
    }
    @Override
    public boolean isPageMatchToObject(Component component, Object o) {
        return true;
    }
    public static class ImageSwiper{
        int resImage;
        public ImageSwiper(int imageRes) {
            resImage = imageRes;
        }
    }
}


与前面的PageSlider组件差不多,不在赘述。不过,前面我们是添加布局,这里我们是直接添加Image组件。


PageSliderIndicator与PageSlider关联

最后,我们需要将PageSliderIndicator与PageSlider组件进行关联,这样才能达到滑动图片以及点击下面的按钮,双互动的效果。


与TabList与PageSlider组件类似。不过,这里只需要通过PageSliderIndicator组件绑定即可,不需要双向绑定,它自己会完成。示例如下:

public class MainAbilitySlice extends AbilitySlice {
    private PageSlider pageSlider;
    private PageSliderIndicator pageSliderIndicator;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        this.pageSlider=(PageSlider)findComponentById(ResourceTable.Id_ability_main_pageslider);
        this.pageSliderIndicator=(PageSliderIndicator)findComponentById(ResourceTable.Id_ability_main_pagesliderindicator);
        this.pageSlider.setProvider(new SwiperPageSliderProvider(getData(),this));
        this.pageSliderIndicator.setItemOffset(60);
        this.pageSliderIndicator.setPageSlider(pageSlider);
    }
    private List<SwiperPageSliderProvider.ImageSwiper> getData() {
        List<SwiperPageSliderProvider.ImageSwiper> imageSwiperList = new ArrayList<>();
        imageSwiperList.add(new SwiperPageSliderProvider.ImageSwiper(ResourceTable.Graphic_11));
        imageSwiperList.add(new SwiperPageSliderProvider.ImageSwiper(ResourceTable.Graphic_12));
        imageSwiperList.add(new SwiperPageSliderProvider.ImageSwiper(ResourceTable.Graphic_13));
        imageSwiperList.add(new SwiperPageSliderProvider.ImageSwiper(ResourceTable.Graphic_14));
        imageSwiperList.add(new SwiperPageSliderProvider.ImageSwiper(ResourceTable.Graphic_15));
        return imageSwiperList;
    }
}

运行之后,效果如首图所示。


需要注意的是,默认其不会轮回的切换。后面讲解线程知识的时候,会教大家用定时器实现轮播效果,还请不要太急。

相关文章
|
1天前
|
API
鸿蒙开发:切换至基于rcp的网络请求
本文的内容主要是把之前基于http封装的库,修改为当前的Remote Communication Kit(远场通信服务),无非就是通信的方式变了,其他都大差不差。
鸿蒙开发:切换至基于rcp的网络请求
|
6天前
|
UED
鸿蒙next版开发:相机开发-适配不同折叠状态的摄像头变更(ArkTS)
在HarmonyOS 5.0中,ArkTS提供了强大的相机开发能力,特别是针对折叠屏设备的摄像头适配。本文详细介绍了如何在ArkTS中检测和适配不同折叠状态下的摄像头变更,确保相机应用在不同设备状态下的稳定性和用户体验。通过代码示例展示了具体的实现步骤。
29 8
|
6天前
|
API 内存技术
鸿蒙next版开发:相机开发-拍照(ArkTS)
在HarmonyOS 5.0中,ArkTS提供了一套完整的API来管理相机功能,特别是拍照功能。本文详细介绍如何在ArkTS中实现拍照功能,包括导入接口、创建会话、配置会话、触发拍照及监听拍照输出流状态,并提供代码示例进行详细解读。通过本文,你将掌握如何在HarmonyOS 5.0中使用ArkTS实现高效的拍照功能。
25 7
|
1天前
|
Android开发
鸿蒙开发:自定义一个简单的标题栏
本身就是一个很简单的标题栏组件,没有什么过多的技术含量,有一点需要注意,当使用沉浸式的时候,注意标题栏的位置,需要避让状态栏。
鸿蒙开发:自定义一个简单的标题栏
|
6天前
|
前端开发 API
鸿蒙next版开发:相机开发-预览(ArkTS)
在HarmonyOS 5.0中,使用ArkTS进行相机预览是核心功能之一。本文详细介绍了如何使用ArkTS实现相机预览,包括导入相机接口、创建Surface、获取相机输出能力、创建会话并开始预览,以及监听预览输出状态等步骤,并提供了代码示例。通过本文,读者可以掌握在HarmonyOS 5.0中使用ArkTS进行相机预览的基本方法。
23 6
|
6天前
|
编解码 开发工具 计算机视觉
鸿蒙5.0版开发:命令行工具(mediatool工具)
在HarmonyOS 5.0的开发中,命令行工具mediatool基于FFmpeg库,提供了丰富的媒体处理功能,如视频和音频的转码、封装格式转换、提取媒体信息等。本文详细介绍mediatool的功能和使用方法,并提供代码示例。
25 6
|
6天前
|
前端开发 开发者
鸿蒙next版开发:相机开发-元数据(ArkTS)
在HarmonyOS 5.0中,ArkTS新增了对相机元数据的访问能力,帮助开发者获取图像的详细信息。本文介绍了如何在ArkTS中获取和使用相机元数据,包括导入接口、创建元数据输出流、开启和停止元数据输出、监听元数据对象可用事件等步骤,并提供了详细的代码示例。
23 5
|
6天前
|
前端开发 API 开发者
鸿蒙next版开发:相机开发-录像(ArkTS)
在HarmonyOS 5.0中,ArkTS提供了一套完整的API来管理相机录像功能。本文详细介绍了如何在ArkTS中实现录像功能,包括导入接口、创建Surface、获取相机输出能力、创建会话并开始录像以及监听录像输出流状态,并提供了代码示例进行解读。希望本文能帮助开发者更好地利用ArkTS的相机录像功能。
21 5
|
6天前
|
API 开发者 内存技术
鸿蒙next版开发:相机开发-会话管理(ArkTS)
在HarmonyOS 5.0中,ArkTS提供了完整的API来管理相机会话,包括创建相机输入流、预览输出流、拍照输出流,配置和管理会话。本文详细介绍了相机会话管理的基础步骤和代码示例,涵盖会话创建、闪光灯和焦距配置及错误处理等内容,帮助开发者更好地利用ArkTS开发相机应用。
21 4
|
6天前
|
UED
鸿蒙next版开发:音频并发策略扩展(ArkTS)
在HarmonyOS 5.0中,音频并发策略通过ArkTS的AudioSessionManager接口管理多个音频流的交互和优先级。本文介绍了如何自定义音频焦点策略,包括激活、停用音频会话及注册回调函数,并提供了示例代码。适用于多媒体、通信和游戏应用。
25 4