欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Android实现一个比相册更高大上的左右滑动特效(附源码)

程序员文章站 2022-07-03 19:36:36
在android里面,想要实现一个类似相册的左右滑动效果,我们除了可以用gallery、horizontalscrollview、viewpager等控件,还可以用一个叫做 viewflipper 的...

在android里面,想要实现一个类似相册的左右滑动效果,我们除了可以用gallery、horizontalscrollview、viewpager等控件,还可以用一个叫做 viewflipper 的类来代替实现,它继承于 viewanimator。如见其名,这个类是跟动画有关,会将添加到它里面的两个或者多个view做一个动画,然后每次只显示一个子view,通过在 view 之间切换时执行动画,最终达到一个类似相册能左右滑动的效果。

本次功能要实现的两个基本效果

  • 最基本的左右滑动效果
  • 从屏幕的45度方向进入和退出的效果

实现思路

  • 按照 viewflipper 的源码说明,它是将两个或多个view用动画展示出来。那么我就在 viewflipper 内放入两个布局,每个布局都包含一个 textview 和 imageview,分别用于显示文字和图片
  • 既然要有动画效果,我准备使用android的位移动画类 translateanimation,设置起始的横纵坐标值
  • 为了让效果明显,我会设置 viewflipper 的进入和退出屏幕的动画,并且在左滑时呈现一个动画、右滑时呈现另一个动画(需要判断是左滑还是右滑:重写 ontouchevent 方法,比较横坐标x的值的变化)

源码如下:

1、主activity

2、对应的布局文件 view_flipper_demo.xml

3、动画辅助类 animationhelper.java

4、对应的效果图如下

Android实现一个比相册更高大上的左右滑动特效(附源码)

可以看到,这个左右滑动效果没有任何酷炫的地方。我们不妨先来看看跟动画相关的几个重点地方:

(1)函数 setinanimation:是指 view 进入屏幕的动效

(2)函数 setoutanimation:是指 view 退出屏幕的动效

(3)translateanimation的构造函数的参数解释:

1、fromxtype/toxtype/fromytype/toytype,取值共有三个:

animation.absoluteanimation.relative_to_selfanimation.relative_to_parent

我这里用的是 animation.relative_to_parent,当传入该参数时,其余几个坐标值需要传入百分比参数(1.0表示100%);如果传入 animation.absolute,坐标值需要传入屏幕上的绝对位置(比如1000,1000)

2、fromxvalue:起点的横坐标值

3、toxvalue:终点的横坐标值

4、fromyvalue:起点的纵坐标值

5、toyvalue:终点的纵坐标值

如果我们想让这个效果变成45度从屏幕的四个角进入和退出,那代码就应该这么写(注意代码中传入的 4 个横纵坐标值):

对应的效果如下:

Android实现一个比相册更高大上的左右滑动特效(附源码)

之所以有 -1.0f 这个值,是因为屏幕上的横纵坐标值的分布可以用如下象限来表示:

Android实现一个比相册更高大上的左右滑动特效(附源码)

viewflipper中的 view 就位于象限的中心位置。因此,如果动画从左上角进入,那么它的起始横纵坐标就是(-1,-1)。大家可以按照这个思路去实现自己想要的动效。

到此这篇关于android实现一个比相册更高大上的左右滑动特效(附源码)的文章就介绍到这了,更多相关android 实现左右滑动特效内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!