PhotoMovie (https://github.com/yellowcath/PhotoMovie)可轻松实现类似抖音,微视,美拍的照片电影功能。
<>强滤镜效果强>
<强>转场效果强>
首先在项目根目录的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正常播放即可,效果如下
目前内置了9个滤镜