本示例介绍使用vibrator.startVibration方法实现手机振动效果,用animateTo显示动画实现点击后的抖动动画。
使用说明
- 加载完成后显示登录界面,未勾选协议时点击一键登录按钮会触发手机振动效果和提示文本的抖动动画。
- 创建一个函数startVibrate()调用vibrator.startVibration方法实现手机振动效果(需要权限:ohos.permission.VIBRATE)。源码参考VibrateEffect.ets
startVibrate() {
try {
// TODO: 知识点:vibrator.startVibration 根据指定振动效果和振动属性触发马达振动
vibrator.startVibration({
type: 'time',
// 持续触发马达振动时间600ms
duration: CONFIGURATION.VIBRATION_TIME,
}, {
id: 0,
usage: 'alarm',
}, (error: BusinessError) => {
if (error) {
logger.error(`Failed to start vibration. Code: ${error.code}, message: ${error.message}`);
return;
}
logger.info('Succeed in starting vibration');
});
} catch (err) {
let e: BusinessError = err as BusinessError;
logger.error(`An unexpected error occurred. Code: ${e.code}, message: ${e.message}`);
}
}
- 创建一个函数startAnimation()使用animateTo显示动画实现提示文本的抖动动画。源码参考VibrateEffect.ets
startAnimation() {
if (!this.uiContext) {
return;
}
this.translateX = CONFIGURATION.POSITION_ZERO;
// TODO: 知识点:通过keyframeAnimateTo关键帧动画指定状态变化过渡动效
this.uiContext.keyframeAnimateTo({ iterations: CONFIGURATION.PLAYBACK_COUNT }, [
{
// 第一段动画时长为100ms,translateX属性从0到5
duration: CONFIGURATION.ANIMATION_TIME,
event: () => {
this.translateX = CONFIGURATION.TRANSLATE_OFFSET_X;
}
},
{
// 第二段动画时长为100ms,translateX属性从5到0
duration: CONFIGURATION.ANIMATION_TIME,
event: () => {
this.translateX = CONFIGURATION.POSITION_ZERO;
}
}
]);
}
不涉及
vibrateeffect // har类型
|---components
| |---constantsData.ets // 定义常量数据
|---ProductView.ets // 视图层-场景列表页面