HarmonyOS 鸿蒙Next 下拉刷新动画实战
HarmonyOS 鸿蒙Next 下拉刷新动画实战
介绍
本示例实现了界面下拉刷新动画显示功能,常见APP下拉界面即可完成动画刷新效果。
效果图
使用说明
下拉界面,动画刷新效果即会显现,如效果图所示。
实现思路
点击跳转系统相机应用
- List({ space: 10 }):创建一个列表组件;列表元素生成:LazyForEach(this.list, (item: PostCardData, index: number) => {...}):使用 LazyForEach 方法遍历 this.list 数组,对于数组中的每个元素 item,创建一个 ListItem 组件。在 ListItem 中,创建一个 PostCard 组件,并将当前元素 item 作为 data 属性传递给它。同时,为 PostCard 组件定义了一个 onDelete 回调函数,当该函数被触发时,会调用 this.list.deleteData(index) 从 this.list 数组中删除当前元素。
List({ space: 10 }) {
LazyForEach(this.list, (item: PostCardData, index: number) => {
ListItem() {
PostCard({
data: item, onDelete: () => {
this.list.deleteData(index);
}
})
}
})
<span class="hljs-title">ListItem</span><span class="hljs-params">()</span> {
<span class="hljs-title">this</span>.<span class="hljs-title">loadMoreUI</span><span class="hljs-params">()</span>
}.<span class="hljs-title">visibility</span><span class="hljs-params">(<span class="hljs-keyword">this</span>.isLoading || <span class="hljs-keyword">this</span>.isRetry ? Visibility.Visible : Visibility.None)</span>
}
- Refresh:创建一个Refresh组件,其中refreshing属性与$$this.isLoading绑定,builder属性使用this.customRefreshUI() 函数生成的内容。当刷新操作发生时,会根据 $$this.isLoading 的状态显示相应的刷新UI元素,而具体的刷新UI元素由this.customRefreshUI()函数来创建。
Refresh({ refreshing: $$this.isLoading, builder: this.customRefreshUI() }) {
Column({ space: 10 }) {
Banner()
ButtonGroup()
Text('推荐阅读').fontSize(12).fontColor(Color.Grey).width('100%').height(20)
ContentList()
}
}.onStateChange((state: RefreshStatus) => {
if (state === RefreshStatus.Refresh) {
this.isLoading = true;
}
})
- 使用[@Builder](/user/Builder)装饰器定义一个名为customRefreshUI的函数。
@Builder
customRefreshUI() {
RefreshText({ isLoading: this.isLoading })
}
- RefreshText构建:animate方法,当isLoading为true时,会调用animateTo方法执行动画。
duration: 2000:动画时长为 2000 毫秒。
finishCallbackType: FinishCallbackType.LOGICALLY:完成回调类型为逻辑类型。
curve: Curve.Linear:动画曲线为线性。
iterations: -1:动画将无限次迭代。
onFinish回调函数:当动画完成时将value重置为 0。
第二个参数函数:在动画执行过程中更新value为 1。
export struct RefreshText {
[@Link](/user/Link) [@Watch](/user/Watch)('animate') isLoading: boolean;
[@State](/user/State) value: number = 0;
animate() {
if (this.isLoading) {
hilog.info(0x0000, ‘testTag’, <span class="javascript"><span class="hljs-keyword">do</span> animate</span>
);
animateTo({
duration: 2000,
finishCallbackType: FinishCallbackType.LOGICALLY,
curve: Curve.Linear,
iterations: -1,
onFinish: () => {
this.value = 0
}
}, () => {
this.value = 1
})
}
}
build() {
Stack() {
···
}
}
}
工程目录
entry/src/main/ets/
|---pages
| |---Index.ets // 首页
ground/src/main/ets/
|---components
| |---ButtonGroupTop.ets // 圈子按钮组件
| |---DialogFeedback.ets // 反馈弹窗
| |---FAB.ets
| |---PostCard.ets // 海报卡片
| |---RefreshText.ets // 下拉刷新显示文本
|---constant
| |---ButtonListInstances.ets // 圈子按钮列表定义
|---model
| |---ViewModels.ets // 数据模型定义
|---views
| |---Banner.ets // 轮播组件
| |---ButtonGroup.ets // 按钮集合组件
| |---ContentList.ets // 评论列表组件
| |---Ground.ets // 背景组件
| |---Search.ets // 搜索框组件
更多关于HarmonyOS 鸿蒙Next 下拉刷新动画实战的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS 鸿蒙Next 下拉刷新动画实战的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS(鸿蒙)系统中实现下拉刷新动画的场景化代码,可以通过自定义动画资源并结合相应的逻辑处理来完成。以下是一个简化的示例代码,用于展示如何在下拉刷新场景中实现动画效果:
<!-- 在res/animation目录下定义动画资源文件,例如refresh_animation.xml -->
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="300"
android:fromYDelta="100%"
android:toYDelta="0%" />
<alpha
android:duration="300"
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
// 注意:此处示例为说明逻辑,实际鸿蒙开发应使用ArkUI或ETS等鸿蒙特有语言
// 在你的页面逻辑中加载动画并执行
Animation animation = AnimationUtils.loadAnimation(this, R.anim.refresh_animation);
yourRefreshableView.startAnimation(animation);
// 同时,你可能需要监听下拉刷新事件,结合动画的播放状态进行逻辑处理
yourRefreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh() {
// 执行刷新操作,同时启动动画
yourRefreshableView.startAnimation(animation);
// 刷新完成后停止动画并重置状态
// yourRefreshableView.clearAnimation();
// yourRefreshLayout.finishRefresh();
}
});
注意:上述代码仅为示例,实际鸿蒙开发中需使用ArkUI(JS/TS)或ETS等语言实现。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html