# MarqueeView **Repository Path**: herotculb/MarqueeView ## Basic Information - **Project Name**: MarqueeView - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-04-25 - **Last Updated**: 2021-07-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MarqueeView ## 项目介绍 - 项目名称:MarqueeView - 所属系列:openharmony的第三方组件适配移植 - 功能: 1. 可以给任何view设置跑马灯效果 2. 支持各种动画,从上而下,从左而右 等,设置动画时长。 3. 支持自定义动画 - 基线版本:release 0.1.20 - 项目移植状态:已完成 - 调用差异:无 - 开发版本:sdk6,DevEco Studio2.2 Beta1 ## 编程语言 - 编程语言:Java ## 效果图 ## 安装教程 1.在项目根目录下的build.gradle文件中, ``` allprojects { repositories { maven { url 'https://s01.oss.sonatype.org/content/repositories/snapshots/' } } } ``` 2.在entry模块的build.gradle文件中, ``` dependencies { implementation('com.gitee.chinasoft_ohos:MarqueeView:0.0.2-SNAPSHOT') ...... } ``` 在sdk6,DevEco Studio2.2 Beta1下项目可直接运行 如无法运行,删除项目.gradle,.idea,build,gradle,build.gradle文件, 并依据自己的版本创建新项目,将新项目的对应文件复制到根目录下 ## 使用说明 该开源库可以给任何view添加跑马灯效果,您可以随便定义您的view样式,例如: ```xml ``` 然后在MainAbilitySlice中给该布局绑定动画属性,如下: ```java /** * 从上进入,从下退出 */ private void startUpAnimator() { if (upAnimatorGroup != null) { upAnimatorGroup.stop(); upAnimatorGroup = null; } upAnimatorGroup = AnimationUtils.setAnimator(AnimationUtils.getUpInAnimator(dirUpandDown), AnimationUtils.getDownOutAnimator(dirUpandDown)); upAnimatorGroup.setLoopedListener(new Animator.LoopedListener() { @Override public void onRepeat(Animator animator) { pos1++; if (pos1 >= tips1.size()) { pos1 = 0; } setData(textOne, tips1.get(pos1)); } }); upAnimatorGroup.start(); } ``` 这样就实现了给某一个view绑定了动画跑马灯效果。 动画工具类的具体实现方式,是在AnimationUtils中,具体代码如下,如果需要根据业务扩展动画,可以在该工具类中编写: ```java /** * 动画工具类 * 列表项 * * @author:Hexy * @since 2021-03-24 */ public class AnimationUtils { /** * 进入时间 */ public static final int ENTRY_TIME = 300; /** * 停留保持时间 */ public static final int MAINTAIN_TIME = 3000; /** * 持续时间 */ public static final int DURATION_TIME = 200; /** * 起止位置1 */ public static final int START_STOP_POSITION1 = 50; /** * 起止位置2 */ public static final int START_STOP_POSITION2 = 100; private static AnimatorProperty upInAnimator; private static AnimatorProperty downOutAnimator; private static AnimatorProperty downInAnimator; private static AnimatorProperty upOutAnimator; private static AnimatorProperty leftInAnimator; private static AnimatorProperty rightOutAnimator; private static AnimatorProperty rightInAnimator; private static AnimatorProperty leftOutAnimator; private AnimationUtils() { } /** * 从上进入 * * @param component * @return 进入动画 */ public static AnimatorProperty getUpInAnimator(Component component) { upInAnimator = component.createAnimatorProperty(); return upInAnimator.moveFromY(-START_STOP_POSITION1).moveToY(0).alphaFrom(0).alpha(1) .setDelay(ENTRY_TIME).setDuration(DURATION_TIME); } /** * 从下退出 * * @param component * @return 退出动画 */ public static AnimatorProperty getDownOutAnimator(Component component) { downOutAnimator = component.createAnimatorProperty(); return downOutAnimator.moveFromY(0).moveToY(START_STOP_POSITION1).alphaFrom(1).alpha(0) .setDelay(MAINTAIN_TIME).setDuration(DURATION_TIME); } /** * 从下进入 * * @param component * @return 返回从下进入的动画 */ public static AnimatorProperty getDownInAnimator(Component component) { downInAnimator = component.createAnimatorProperty(); return downInAnimator.moveFromY(START_STOP_POSITION1).moveToY(0).alphaFrom(0).alpha(1) .setDelay(ENTRY_TIME).setDuration(DURATION_TIME); } /** * 从上退出 * * @param component * @return 返回从上退出的动画 */ public static AnimatorProperty getUpOutAnimator(Component component) { upOutAnimator = component.createAnimatorProperty(); return upOutAnimator.moveFromY(0).moveToY(-START_STOP_POSITION1).alphaFrom(1).alpha(0) .setDelay(MAINTAIN_TIME).setDuration(DURATION_TIME); } /** * 从左进入 * * @param component * @return 返回从左进入的动画 */ public static AnimatorProperty getLeftInAnimator(Component component) { leftInAnimator = component.createAnimatorProperty(); return leftInAnimator.moveFromX(-START_STOP_POSITION2).moveToX(0).alphaFrom(0).alpha(1) .setDelay(ENTRY_TIME).setDuration(DURATION_TIME); } /** * 从右退出 * * @param component * @return 返回从右退出的动画 */ public static AnimatorProperty getRightOutAnimator(Component component) { rightOutAnimator = component.createAnimatorProperty(); return rightOutAnimator.moveFromX(0).moveToX(START_STOP_POSITION2).alphaFrom(1).alpha(0) .setDelay(MAINTAIN_TIME).setDuration(DURATION_TIME); } /** * 从右进入 * * @param component * @return 返回从右进入的动画 */ public static AnimatorProperty getRightInAnimator(Component component) { rightInAnimator = component.createAnimatorProperty(); return rightInAnimator.moveFromX(START_STOP_POSITION2).moveToX(0).alphaFrom(0).alpha(1) .setDelay(ENTRY_TIME).setDuration(DURATION_TIME); } /** * 从左退出 * * @param component * @return 返回从左退出的动画 */ public static AnimatorProperty getLeftOutAnimator(Component component) { leftOutAnimator = component.createAnimatorProperty(); return leftOutAnimator.moveFromX(0).moveToX(-START_STOP_POSITION2).alphaFrom(1).alpha(0) .setDelay(MAINTAIN_TIME).setDuration(DURATION_TIME); } /** * 设置动画组(进入动画,退出动画) * * @param animators * @return 动画组 */ public static AnimatorGroup setAnimator(Animator... animators) { AnimatorGroup set = new AnimatorGroup(); set.runSerially(animators); set.setLoopedCount(AnimatorGroup.INFINITE); return set; } } ``` ## 测试信息 * CodeCheck代码测试无异常 * CloudTest代码测试无异常 * 病毒安全检测通过 * 当前版本demo功能与原组件基本无差异 ## 版本迭代 0.0.2-SNAPSHOT