Android高仿抖音照片电影功能的实现代码

  

PhotoMovie (https://github.com/yellowcath/PhotoMovie)可轻松实现类似抖音,微视,美拍的照片电影功能。

  

  

<>强滤镜效果

  

 Android高仿抖音照片电影功能的实现代码

  

<强>转场效果

  

 Android高仿抖音照片电影功能的实现代码

  

  

首先在项目根目录的build.gradle文件里添加maven库

        allprojects {   存储库{   …   maven {url ' https://www.jitpack.io '}   }   }      

再在需要用的模块的build.gradle里添加依赖

        依赖关系{   编译com.github.yellowcath: PhotoMovie: 1.5.0的   }      

  

可参照DemoPresenter

     //添加图片   ListphotoDataList=new LinkedList ();   photoDataList。添加(新SimplePhotoData(上下文、photoPath2 PhotoData.STATE_LOCAL));   …   photoDataList。添加(新SimplePhotoData(上下文、photoPathN PhotoData.STATE_LOCAL));//生成图片源   光源光源=新光源(photoDataList);//生成照片电影(使用预定义的水平转场动画)   PhotoMovie PhotoMovie=PhotoMovieFactory。generatePhotoMovie(光源、PhotoMovieFactory.PhotoMovieType.HORIZONTAL_TRANS);//生成负责绘制电影内容的MovieRenderer   MovieRenderer MovieRenderer=new GLTextureMovieRender (glTextureView);/* *   *或MovieRenderer MovieRenderer=new GLSurfaceMovieRenderer (glSurfaceView);   *///照片电影播放器   PhotoMoviePlayer PhotoMoviePlayer=new PhotoMoviePlayer(上下文);   photoMoviePlayer.setMovieRenderer (mMovieRenderer);   photoMoviePlayer.setMovieListener (…);   photoMoviePlayer.setLoop(真正的);   photoMoviePlayer。setOnPreparedListener(新PhotoMoviePlayer.OnPreparedListener () {   @Override   公共空间>   公共enum PhotoMovieType {   解冻,//融雪   ,//缩放   SCALE_TRANS,//缩放,平移   窗口中,//窗扉   HORIZONTAL_TRANS,//横向平移   VERTICAL_TRANS//纵向平移   }      

这里以微视的渐变特效为例展示如何扩展

  

分析得出,渐变特效首先图片居中放置,然后全程做一个微弱的放大动画,后半部分同时透明度变化消失

  

可见需要两个不同的片段类型

  

首先创建FitCenterScaleSegment,继承FitCenterSegment,实现单张图片的放大动画

        公开课FitCenterScaleSegment延伸FitCenterSegment {/* *   *缩放动画范围   */私人mScaleFrom浮动;   私人mScaleTo浮动;      私人mProgress浮动;/* *   * @param时间片段时长   * @param scaleFrom缩放范围   * @param scaleTo缩放范围   */公共FitCenterScaleSegment (int, scaleFrom浮动,浮动scaleTo) {   超级(持续时间);   mScaleFrom=scaleFrom;   mScaleTo=scaleTo;   }      @Override   保护空白>   公共类GradientTransferSegment TransitionSegment<延伸;FitCenterScaleSegment FitCenterScaleSegment>{/* *   *缩放动画范围   */私人mPreScaleFrom浮动;   私人mPreScaleTo浮动;   私人mNextScaleFrom浮动;   私人mNextScaleTo浮动;      公共GradientTransferSegment (int持续时间,   preScaleFrom浮动,浮动preScaleTo,   nextScaleFrom浮动,浮动nextScaleTo) {   mPreScaleFrom=preScaleFrom;   mPreScaleTo=preScaleTo;   mNextScaleFrom=nextScaleFrom;   mNextScaleTo=nextScaleTo;   setDuration(持续时间);   }      @Override   保护空白>   私有静态PhotoMovie initGradientPhotoMovie(光源光源){   ListsegmentList=new ArrayList<祝辞(photoSource.size ());   for (int i=0;我& lt;photoSource.size ();我+ +){   如果(i==0) {   segmentList。添加(新FitCenterScaleSegment (1.1 1600, 1 f, f));   其他}{   segmentList。添加(新FitCenterScaleSegment (1.1 1600, 1.05 f, f));   }   如果我& lt;photoSource.size () - 1) {   segmentList。添加(新GradientTransferSegment (1.0 1.15 800, 1.1 f, f, f, 1.05 f));   }   }   返回新PhotoMovie(光源、segmentList);   }      

然后将这个PhotoMovie正常播放即可,效果如下

  

 Android高仿抖音照片电影功能的实现代码

  

  

目前内置了9个滤镜

     

Android高仿抖音照片电影功能的实现代码