Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
3100ef7f
D
Docs
项目概览
OpenHarmony
/
Docs
大约 1 年 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
3100ef7f
编写于
6月 14, 2023
作者:
Y
yeyinglong
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
新增自定义属性动画说明
Signed-off-by:
N
yeyinglong
<
yeyinglong@hisilicon.com
>
上级
c85a754a
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
180 addition
and
0 deletion
+180
-0
zh-cn/application-dev/Readme-CN.md
zh-cn/application-dev/Readme-CN.md
+1
-0
zh-cn/application-dev/quick-start/arkts-animatable-extend.md
zh-cn/application-dev/quick-start/arkts-animatable-extend.md
+179
-0
zh-cn/application-dev/quick-start/figures/animatable-font-size.gif
...lication-dev/quick-start/figures/animatable-font-size.gif
+0
-0
zh-cn/application-dev/quick-start/figures/animatable-points.gif
...application-dev/quick-start/figures/animatable-points.gif
+0
-0
未找到文件。
zh-cn/application-dev/Readme-CN.md
浏览文件 @
3100ef7f
...
...
@@ -50,6 +50,7 @@
-
[
\@BuilderParam装饰器:引用\@Builder函数
](
quick-start/arkts-builderparam.md
)
-
[
\@Styles装饰器:定义组件重用样式
](
quick-start/arkts-style.md
)
-
[
\@Extend装饰器:定义扩展组件样式
](
quick-start/arkts-extend.md
)
-
[
\@AnimatableExtend装饰器:定义可动画属性
](
quick-start/arkts-animatable-extend.md
)
-
[
stateStyles:多态样式
](
quick-start/arkts-statestyles.md
)
-
状态管理
-
[
状态管理概述
](
quick-start/arkts-state-management-overview.md
)
...
...
zh-cn/application-dev/quick-start/arkts-animatable-extend.md
0 → 100644
浏览文件 @
3100ef7f
# \@AnimatableExtend:定义可动画属性
@AnimatableExtend装饰器用于自定义可动画的属性方法,在这个属性方法中修改组件不可动画的属性。在动画执行过程时,通过逐帧回调函数修改不可动画属性值,让不可动画属性也能实现动画效果。
-
可动画属性:如果一个属性方法在animation属性前调用,改变这个属性的值可以生效animation属性的动画效果,这个属性称为可动画属性。比如height、width、backgroundColor、translate等。
-
不可动画属性:如果一个属性方法在animation属性前调用,改变这个属性的值不能生效animation属性的动画效果,这个属性称为不可动画属性。比如Text组件的fontSize属性、Ployline组件的points属性等。
> **说明:**
>
> 该装饰器从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
## 装饰器使用说明
### 语法
```
ts
@
AnimatableExtend
(
UIComponentName
)
function
functionName
(
value
:
typeName
)
{
.
propertyName
(
value
)
}
```
-
\@
AnimatableExtend仅支持定义在全局,不支持在组件内部定义。
-
\@
AnimatableExtend定义的函数参数类型必须为number类型或者实现 AnimtableArithmetic
\<
T
\>
接口的自定义类型。
-
\@
AnimatableExtend定义的函数体内只能调用
\@
AnimatableExtend括号内组件的属性方法。
### AnimtableArithmetic\<T\>接口说明
对复杂数据类型做动画,需要实现AnimtableArithmetic
\<
T
\>
接口中加法、减法、乘法和判断相等函数。
| 名称 | 入参类型 | 返回值类型 | 说明
| -------- | -------- |-------- |-------- |
| plus | AnimtableArithmetic
\<
T
\>
| AnimtableArithmetic
\<
T
\>
| 加法函数 |
| subtract | AnimtableArithmetic
\<
T
\>
| AnimtableArithmetic
\<
T
\>
| 减法函数 |
| multiply | number | AnimtableArithmetic
\<
T
\>
| 乘法函数 |
| equals | AnimtableArithmetic
\<
T
\>
| boolean | 相等判断函数 |
## 使用场景
以下示例实现字体大小的动画效果。
```
ts
@
AnimatableExtend
(
Text
)
function
animatableFontSize
(
size
:
number
)
{
.
fontSize
(
size
)
}
@
Entry
@
Component
struct
AnimatablePropertyExample
{
@
State
fontSize
:
number
=
20
build
()
{
Column
()
{
Text
(
"
AnimatableProperty
"
)
.
animatableFontSize
(
this
.
fontSize
)
.
animation
({
duration
:
1000
,
curve
:
"
ease
"
})
Button
(
"
Play
"
)
.
onClick
(()
=>
{
this
.
fontSize
=
this
.
fontSize
==
20
?
36
:
20
})
}.
width
(
"
100%
"
)
.
padding
(
10
)
}
}
```
![
image
](
figures/animatable-font-size.gif
)
以下示例实现折线的动画效果。
```
ts
class
Point
{
x
:
number
y
:
number
constructor
(
x
:
number
,
y
:
number
)
{
this
.
x
=
x
this
.
y
=
y
}
plus
(
rhs
:
Point
):
Point
{
return
new
Point
(
this
.
x
+
rhs
.
x
,
this
.
y
+
rhs
.
y
)
}
subtract
(
rhs
:
Point
):
Point
{
return
new
Point
(
this
.
x
-
rhs
.
x
,
this
.
y
-
rhs
.
y
)
}
multiply
(
scale
:
number
):
Point
{
return
new
Point
(
this
.
x
*
scale
,
this
.
y
*
scale
)
}
equals
(
rhs
:
Point
):
boolean
{
return
this
.
x
===
rhs
.
x
&&
this
.
y
===
rhs
.
y
}
}
class
PointVector
extends
Array
<
Point
>
implements
AnimatableArithmetic
<
PointVector
>
{
constructor
(
value
:
Array
<
Point
>
)
{
super
();
value
.
forEach
(
p
=>
this
.
push
(
p
))
}
plus
(
rhs
:
PointVector
):
PointVector
{
let
result
=
new
PointVector
([])
const
len
=
Math
.
min
(
this
.
length
,
rhs
.
length
)
for
(
let
i
=
0
;
i
<
len
;
i
++
)
{
result
.
push
(
this
[
i
].
plus
(
rhs
[
i
]))
}
return
result
}
subtract
(
rhs
:
PointVector
):
PointVector
{
let
result
=
new
PointVector
([])
const
len
=
Math
.
min
(
this
.
length
,
rhs
.
length
)
for
(
let
i
=
0
;
i
<
len
;
i
++
)
{
result
.
push
(
this
[
i
].
subtract
(
rhs
[
i
]))
}
return
result
}
multiply
(
scale
:
number
):
PointVector
{
let
result
=
new
PointVector
([])
for
(
let
i
=
0
;
i
<
this
.
length
;
i
++
)
{
result
.
push
(
this
[
i
].
multiply
(
scale
))
}
return
result
}
equals
(
rhs
:
PointVector
):
boolean
{
if
(
this
.
length
!=
rhs
.
length
)
{
return
false
}
for
(
let
i
=
0
;
i
<
this
.
length
;
i
++
)
{
if
(
!
this
[
i
].
equals
(
rhs
[
i
]))
{
return
false
}
}
return
true
}
get
():
Array
<
[
x
:
number
,
y
:
number
]
>
{
let
result
=
[]
this
.
forEach
(
p
=>
result
.
push
([
p
.
x
,
p
.
y
]))
return
result
}
}
@
AnimatableExtend
(
Polyline
)
function
animatablePoints
(
points
:
PointVector
)
{
.
points
(
points
.
get
())
}
@
Entry
@
Component
struct
AnimatablePropertyExample
{
@
State
points
:
PointVector
=
new
PointVector
([
new
Point
(
50
,
Math
.
random
()
*
200
),
new
Point
(
100
,
Math
.
random
()
*
200
),
new
Point
(
150
,
Math
.
random
()
*
200
),
new
Point
(
200
,
Math
.
random
()
*
200
),
new
Point
(
250
,
Math
.
random
()
*
200
),
])
build
()
{
Column
()
{
Polyline
()
.
animatablePoints
(
this
.
points
)
.
animation
({
duration
:
1000
,
curve
:
"
ease
"
})
.
size
({
height
:
220
,
width
:
300
})
.
fill
(
Color
.
Green
)
.
stroke
(
Color
.
Red
)
.
backgroundColor
(
'
#eeaacc
'
)
Button
(
"
Play
"
)
.
onClick
(()
=>
{
this
.
points
=
new
PointVector
([
new
Point
(
50
,
Math
.
random
()
*
200
),
new
Point
(
100
,
Math
.
random
()
*
200
),
new
Point
(
150
,
Math
.
random
()
*
200
),
new
Point
(
200
,
Math
.
random
()
*
200
),
new
Point
(
250
,
Math
.
random
()
*
200
),
])
})
}.
width
(
"
100%
"
)
.
padding
(
10
)
}
}
```
![
image
](
figures/animatable-points.gif
)
\ No newline at end of file
zh-cn/application-dev/quick-start/figures/animatable-font-size.gif
0 → 100644
浏览文件 @
3100ef7f
80.6 KB
zh-cn/application-dev/quick-start/figures/animatable-points.gif
0 → 100644
浏览文件 @
3100ef7f
178.5 KB
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录