# AnimationEasingFunctions
**Repository Path**: HarmonyOS-tpc/AnimationEasingFunctions
## Basic Information
- **Project Name**: AnimationEasingFunctions
- **Description**: ohos动画缓动功能。让动画更逼真
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 4
- **Forks**: 2
- **Created**: 2021-04-15
- **Last Updated**: 2024-04-09
## Categories & Tags
**Categories**: harmonyos-animate
**Tags**: None
## README
# AnimationEasingFunctions
## 目录
* [功能介绍](#功能介绍)
* [演示](#演示)
* [集成](#集成)
* [使用示例](#使用示例)
* [接口说明](#接口说明)
## 功能介绍
- [x] ohos动画缓动功能。让动画更逼真!
实现下列多种动画运动轨迹
- BackEaseIn
- BackEaseOut
- BackEaseInOut
- BounceEaseIn
- BounceEaseOut
- BounceEaseInOut
- CircEaseIn
- CircEaseOut
- CircEaseInOut
- CubicEaseIn
- CubicEaseOut
- CubicEaseInOut
- ElasticEaseIn
- ElasticEaseInOut
- ElasticEaseOut
- ExpoEaseIn
- ExpoEaseOut
- ExpoEaseInOut
- QuadEaseIn
- QuadEaseOut
- QuadEaseInOut
- QuintEaseIn
- QuintEaseOut
- QuintEaseInOut
- SineEaseIn
- SineEaseOut
- SineEaseInOut
- Linear
## 演示
|缓动动画 | 缓动动画|
|:---:|:---:|
|
|
|
## 集成
```
方式一:
将项目中的build.gradle文件中dependencies→classpath版本改为对应的版本(即你的IDE新建项目中所用的版本)
添加har到entry下的libs文件夹内
entry的build.gradle内添加如下代码
implementation fileTree(dir: 'libs', include: ['*.jar', '*.har'])
方式二:
allprojects{
repositories{
mavenCentral()
}
}
implementation 'io.openharmony.tpc.thirdlib:AnimationEasingFunctions:1.0.2'
```
## 使用示例
```
private ListContainer mEasingList;
private EasingAdapter mAdapter;
private Component mTarget;
private long mDuration = 2000;
private DrawView mHistory;
mEasingList = (ListContainer) findComponentById(ResourceTable.Id_easing_list);
mAdapter = new EasingAdapter(this);
mEasingList.setItemProvider(mAdapter);
mTarget = findComponentById(ResourceTable.Id_target);
mHistory = (DrawView) findComponentById(ResourceTable.Id_history);
mEasingList.setItemClickedListener(new ListContainer.ItemClickedListener() {
@Override
public void onItemClicked(ListContainer listContainer, Component component, int position, long var4) {
mHistory.clear();
Skill skill = (Skill) component.getTag();
// 动画集合
AnimatorGroup set = new AnimatorGroup();
mTarget.setTranslationX(0);
mTarget.setTranslationY(0);
// 数值动画
AnimatorValue animator = new AnimatorValue();
animator.setDuration(mDuration);
BaseEasingMethod easing = skill.getMethod(mDuration);
// 画最开始的点
mHistory.drawPoint(0, mDuration, 0 - vpToPixels(getContext(), 60));
set.runSerially(
Glider.glide(skill, mDuration, animator,new AnimatorValue.ValueUpdateListener() {
@Override
public void onUpdate(AnimatorValue animatorValue, float value) {
float start = 0;
float end = -vpToPixels(getContext(), 157) ;
float result = easing.evaluate(value, start, end);
mTarget.setTranslationY(result);
mHistory.drawPoint(mDuration * value, mDuration, result - vpToPixels(getContext(), 60));
}
}));
set.setDuration(mDuration);
set.start();
}
});
```
## 接口说明
```java
/**
* 设置动画
*
* @param skill 动画方式
* @param duration 时长
* @param animator 数值动画
* @param valueUpdateListener 动画监听器
* @return 动画对象
*/
public static AnimatorValue glide(
Skill skill,
float duration,
AnimatorValue animator,
AnimatorValue.ValueUpdateListener valueUpdateListener)
/**
* 设置动画
*
* @param skill 动画方式
* @param duration 时长
* @param animator 数值动画
* @return 动画对象
*/
public static AnimatorValue glide(
Skill skill,
float duration,
AnimatorValue animator)
/**
* 控制动画表达式
*
* @param duration 时长
* @return BaseEasingMethod
*/
public BaseEasingMethod getMethod(float duration)
/**
* 获得动画结果
*
* @param fraction 动画完成度
* @param startValue 动画开始位置
* @param endValue 动画结束位置
* @return 动画结果
*/
public final Float evaluate(float fraction, Float startValue, Float endValue)
```