# HarmonyOS应用开发基础——Slider案例详解

本文详细介绍了在HarmonyOS应用开发中如何使用Slider组件,包括基础代码实现和进阶用法,如结合图片放大器功能,实现拖动滑块时同步放大或缩小图片及移动图片的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HarmonyOS应用开发基础——Slider组件案例详解

案例详解

基础代码使用

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:alignment="center" 
 ohos:orientation="vertical"> 
<Slider 
ohos:id="$+id:slider" 
ohos:height="50vp" 
ohos:width="300vp" ohos:background_instruct_element="#0000FF" ohos:enabled="true" 
ohos:progress_color="#FF0000" 
ohos:thumb_element="#00FF00" 
ohos:vice_progress="80" 
ohos:vice_progress_element="#923456" 
ohos:max="100" 
ohos:min="0" /> 
</DirectionalLayout>
java文件
public class MainAbilitySlice extends AbilitySlice implements Slider.ValueChangedListener { 
	@Override
	public void onStart(Intent intent) 
	{
	 super.onStart(intent);
	 super.setUIContent(ResourceTable.Layout_ability_main); 		
	 //找到滑块组件 Slider slider = (Slider) 
	 findComponentById(ResourceTable.Id_slider);
	  //给滑块组件绑定一个事件 //进度值改变事件 
	  slider.setValueChangedListener(this); }
	  //当滑块组件中的进度值改变的时候,就会调用这个方法
	  //参数一:滑块组件对象 
	  //参数二:当前的进度值 
	  //参数三:当前滑块是否可以被滑动 
	  @Override
		public void onProgressUpdated(Slider slider, int i, boolean b) { 
		ToastUtils.showDialog(this,"当前的进度值为:" + i); }
		//当用户用鼠标或者用手指 //按下滑块不松的时候,会调用该方法 
		@Override
		public void onTouchStart(Slider slider) { 
		ToastUtils.showDialog(this,"按下不松"); }
		//松开滑块的时候,会调用该方法。 @Override
		public void onTouchEnd(Slider slider) { ToastUtils.showDialog(this,"松开"); } }

代码进阶(图片放大器)

需求1:拖动滑块的同时放大或者缩小图片 需求2:移动图片
#### 项目结构

在这里插入图片描述

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:alignment="center"
    ohos:orientation="vertical">

    <Image
        ohos:id="$+id:msg"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:image_src="$media:girl1"
        />

<Slider
    ohos:id="$+id:slider"
    ohos:height="50vp"
    ohos:width="300vp"
    ohos:enabled="true"
    ohos:background_instruct_element="#0000ff"
    ohos:max="100"
    ohos:min="0"
    />

</DirectionalLayout>
java文件
package com.example.sliderapplication.slice;

import com.example.sliderapplication.ResourceTable;
import com.example.sliderapplication.toasutil.ToastUtils;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Component;
import ohos.agp.components.Image;
import ohos.agp.components.Slider;
import ohos.multimodalinput.event.MmiPoint;
import ohos.multimodalinput.event.TouchEvent;

public class MainAbilitySlice extends AbilitySlice implements Slider.ValueChangedListener, Component.TouchEventListener {
    Slider slider;
    Image img;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        slider= (Slider) findComponentById(ResourceTable.Id_slider);
        img= (Image) findComponentById(ResourceTable.Id_msg);
        //进度条改变事件
        slider.setValueChangedListener(this);
        img.setTouchEventListener(this);
    }

    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }

    /**
     * 滑动组件的进度改变事件
     * @param slider 组件对象
     * @param i 进度值
     * @param b 是否可以被滑动
     */
    @Override
    public void onProgressUpdated(Slider slider, int i, boolean b) {
        if(i==0){
            i=1;
        }
        float result= (float) (i*0.1);
        img.setScale(result,result);
    }

    /**
     * 鼠标或手指按下,一次方法只会被调用一次
     * @param slider
     */
    @Override
    public void onTouchStart(Slider slider) {
        ToastUtils.showDialog(this,"按下不松");
    }

    /**
     * 鼠标或手指抬起
     * @param slider
     */
    @Override
    public void onTouchEnd(Slider slider) {
        ToastUtils.showDialog(this,"松开");
    }
    float x1,y1;
    float imgx,imgy;
    @Override
    public boolean onTouchEvent(Component component, TouchEvent touchEvent) {
        int action=touchEvent.getAction();
        MmiPoint position=touchEvent.getPointerPosition(0);
        if(action==TouchEvent.PRIMARY_POINT_DOWN)
        {
            x1=position.getX();
            y1=position.getY();

            imgx=img.getTranslationX();
            imgy=img.getTranslationY();
        }
        else if(action==TouchEvent.POINT_MOVE){
            float movex=position.getX();
            float movey=position.getY();
            float x=movex-x1;
            float y=movey-y1;
            img.setTranslation(imgx+x,imgy+y);
        }
        else if(action==3){

        }
        return false;
    }
}

学前必读:HarmonyOS学习资源主题分享 学前必读:OpenHarmony-联盟生态资料合集 常见问题(JAVA、JS开发模拟器、模拟器运行) 1.常见问题之HarmonyOS元服务的设计与开发解析 2.常见问题之Java开发 3.常见问题之JS开发 4.常见问题之模拟器登录 5.常见问题之模拟器运行 6.常见问题之如何使用JsJava开发HarmonyOS UI 7.常见问题之应用配置 8.常见问题之预览器运行 技术解读(框架、场景案例解读) 1.技术解读之HarmonyOS轻量JS开发框架与W3C标准差异分析 2.技术解读之HarmonyOS驱动加载过程分析 3.技术解读之HarmonyOS组件库使用实践 4.技术解读之华为架构师解读:HarmonyOS低时延高可靠消息传输原理 5.技术解读之解密HarmonyOS UI框架 6.技术解读之如何从OS框架层面实现应用服务功能解耦 生态案例(游戏、农业、教育) 1.生态案例:【开发者说】重塑经典,如何在HarmonyOS手机上还原贪吃蛇游戏 2.生态案例:HarmonyOLabo涂鸦鸿蒙亲子版 3.生态案例HarmonyOS分镜头APP案例 4.生态案例HarmonyOS时光序历史学习案例 5.生态案例HarmonyOS先行者说 宝宝巴士携手HarmonyOS共同打造儿童教育交互新体验 6.生态案例HarmonyOS智能农场物联网连接实践 7.生态案例:分布式开发样例,带你玩转多设备pptx 8.生态案例:华为分布式日历应用开发实践 HarmonyOS概述(官网资料解读) 1.HarmonyOS概述:技术特性 2.HarmonyOS概述:开发工具与平台 3.HarmonyOS概述:系统安全 4.HarmonyOS概述:系统定义 5.HarmonyOS概述:下载与安装软件 6.HarmonyOS概述:应用开发基础知识 7.HarmonyOS概述:最全HarmonyOS文档和社区资源使用技巧 HarmonyOS基础入门必看视频课 【视频合集】入门到进阶视频学习资料合集30+ 【直播回顾】HarmonyOS应用开发系列课基础篇_从零开始开发HarmonyOS应用 【直播回顾】HarmonyOS应用开发系列课基础篇_如何让HarmonyOS应用调试速度翻倍 【直播回顾】HarmonyOS应用开发系列课基础篇_HarmonyOS分布式应用开发实践 运行第一个HarmonyOS Demo应用 N个Codelab案例轻松入门 1.【Codelab】HarmonyOS基于图像模块实现图库图片的四种常见操作 2.【CodeLab】手把手教你创建第一个手机“Hello World” 3.【Codelab】如此简单!一文带你学会15个HarmonyOS JS组件 4.【Codelab】懒人“看”书新法—鸿蒙语音播报,到底如何实现? 5.【Codelab】基于AI通用文字识别的图像搜索,这波操作亮了 6.【Codelab】开发样例概览
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值