鸿蒙应用开发 | (Slider) 用法,拖动进度条改变图片大小和透明度

导语:大家好,我是你们的朋友 朋哥,十年码农经验,对技术情有独钟。

今天来一个小小的实战,使用进度条的托送功能,实现改变图片的比例和透明度 。

图片

不多说了,今天的内容简单,下面我们开始今天的文章,还是老规矩,通过如下几点来说:

1,功能的使用场景 
2,用到的属性 
3,实战

简介

鸿蒙中进度条目前有3种方式:RoundProgressBar,ProgressBar,Slider,分别是:圆形,线性,和拖动,今天来说说拖动进度条,该类型的进度条有一个拖动bar用来拖动,通过重写Slider.ValueChangedListener 的函数 onProgressUpdated 实现拖动的操作更新 。
 

用到的属性

Image:
 

image_scane.setScale(i/10,i/10);
image_scane.setAlpha(i/10);

实战

1,添加两个拖动条

<?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:padding="10vp"
    ohos:alignment="horizontal_center"
    ohos:orientation="vertical">

    <Image
        ohos:id="$+id:image_scane"
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:scale_mode="clip_center"
        ohos:image_src="$media:image"
        />
    <Text
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:top_margin="100vp"
        ohos:text_size="18fp"
        ohos:text="改变图片大小"/>
    <Slider
        ohos:id="$+id:slider_opt"
        ohos:height="match_content"
        ohos:width="match_parent"
        ohos:top_margin="10vp"/>

    <Text
        ohos:height="match_content"
        ohos:width="match_content"
        ohos:top_margin="10vp"
        ohos:text_size="18fp"
        ohos:text="改变图片透明度"/>
    <Slider
        ohos:id="$+id:slider_opt2"
        ohos:height="match_content"
        ohos:width="match_parent"
        ohos:top_margin="10vp"/>

</DirectionalLayout>

2,添加监听接口

实现 接口 :Slider.ValueChangedListener

重写函数:

@Override
public void onProgressUpdated(Slider slider, int i, boolean b) {
    image_scane.setScale(i/10,i/10);
    image_scane.setAlpha(i/10);
}

@Override
public void onTouchStart(Slider slider) {

}

@Override
public void onTouchEnd(Slider slider) {

}

在 onProgressUpdated 函数中更新操作:​​​​​​​

image_scane.setScale(i/10,i/10);image_scane.setAlpha(i/10);

源码:
https://gitee.com/codegrowth/haomony-develop/tree/master/SliderChangeImageScanAphen

老规矩 代码不能少,下载代码 运行效果看看,记得点个赞。
源码:
https://gitee.com/codegrowth/haomony-develop/tree/master/ProgressBar​​​​​​​

关注公众号【程序员漫话编程】,后台回复 ”鸿蒙“ ,即可获得上千鸿蒙开源组件。

原创不易,有用就关注一下。要是帮到了你 就给个三连吧,多谢支持。
 

觉得不错的小伙伴,记得帮我 点个赞和关注哟,笔芯笔芯~**

作者:码工
 

有问题请留言或者私信,可以 微信搜索:程序员漫话编程,关注公众号获得更多免费学习资料。

<think>嗯,用户问的是Unity中如何改变Slider滑动条的左右两侧颜色不同。首先,我需要回忆一下Unity的UI组件结构。Slider由背景、填充区域手柄组成。默认情况下,填充区域可能只覆盖左边或右边,取决于Slider的方向。要让左右两侧异色,可能需要分别处理背景填充区域。 首先,用户可能需要调整Slider的组成部分。比如,背景(Background)可以设置为右侧的颜色,而填充区域(Fill)设置为左侧的颜色。这样当滑块滑动时,填充区域覆盖左侧,背景显示右侧。这样就能实现左右异色效果。 然后,可能需要具体步骤。例如,在Inspector面板中找到BackgroundFill的子对象,分别修改它们的Image组件的颜色。另外,需要注意Slider的Direction设置,如果是水平从左到右,填充区域会从左开始扩展,覆盖背景的左侧部分,而背景右侧保持原色。 还有可能需要考虑不同的方向,比如从右到左,或者垂直方向,这时候调整的方式可能不同。另外,如果用户需要更复杂的样式,可能需要自定义图像,比如将BackgroundFill的Source Image换成自定义的精灵,确保颜色分割正确。 可能遇到的问题包括填充区域未正确覆盖,颜色显示不协调。这时候需要检查填充区域的锚点轴心点设置,确保它随着滑块移动正确扩展。另外,可能需要调整Rect Transform的尺寸位置,确保左右颜色分界与滑块位置同步。 最后,总结步骤:修改Background为右侧颜色,Fill为左侧颜色,调整Slider方向,必要时自定义图像。这样就能实现Slider滑动时左右两侧颜色不同。</think>在Unity中实现Slider滑动条左右侧异色效果,可以通过以下步骤完成: --- ### **实现原理** Slider控件由三个核心部分组成: 1. **Background**:滑动条背景(默认灰色长条) 2. **Fill**:填充区域(通常表示进度值的彩色部分) 3. **Handle**:滑块手柄(可拖拽的圆形/方形控件) 通过分别设置 `Background` `Fill` 的颜色,即可实现左右异色效果。 --- ### **具体步骤** 1. **创建Slider组件** - 右键Hierarchy面板 → UI → Slider - 自动生成包含`Background`、`Fill Area/Fill`、`Handle Slide Area/Handle`的层级结构 2. **设置背景颜色(右侧颜色)** - 选中`Background`子对象 - 在Inspector面板的`Image`组件中: ```text Color → 设置为右侧颜色(如红色) ``` 3. **设置填充颜色(左侧颜色)** - 展开`Fill Area` → 选中`Fill`子对象 - 在Inspector面板的`Image`组件中: ```text Color → 设置为左侧颜色(如蓝色) ``` 4. **调整Slider方向** - 选中根节点`Slider` - 在Slider组件的`Direction`属性中选择: ```text Direction → Left To Right 或 Right To Left ``` --- ### **关键参数说明** | 属性 | 作用 | 推荐值 | |------|------|--------| | **Fill Rect** | 指定填充区域对象 | 绑定Fill子对象 | | **Min/Max Value** | 滑动条数值范围 | 保持默认0-1即可 | | **Value** | 当前滑动值 | 动态变化(对应填充比例) | --- ### **效果优化技巧** 1. **自定义形状**: - 替换`Background``Fill`的Source Image为自定义Sprite - 示例:使用渐变色纹理实现平滑过渡 2. **动态颜色控制**: ```csharp // 通过代码动态修改颜色 public Slider slider; public Image fillImage; void Update() { fillImage.color = Color.Lerp(Color.blue, Color.green, slider.value); } ``` 3. **手柄隐藏**: - 禁用`Handle Slide Area`或设置手柄透明度为0 - 适用于仅需显示进度条的场景 --- ### **常见问题排查** 1. **填充不显示**: ✅ 检查Fill对象的锚点设置(应拉伸至父容器边缘) 2. **颜色覆盖异常**: ✅ 确认Fill的层级在Background之上 ✅ 调整Fill Area的Width/Height匹配Background 3. **性能优化**: ⚠️ 避免每帧修改颜色,建议使用`OnValueChanged`事件触发颜色变化 --- ### **最终效果** 当拖动Slider时: - 左侧显示Fill颜色(如蓝色) - 右侧保持Background颜色(如红色) - 两种颜色交界处随滑块位置动态变化 可通过Window → Analysis → Profiler 监控UI性能表现,建议在移动端使用纯色替代渐变纹理以优化渲染效率。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉默的闪客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值