parallax(视差)效果源码分析

本文详细分析了ParallaxScrollView的源码,讲解了视差概念及其在滚动中的应用。作者探讨了最初的实现思路,即通过两层视图实现视差效果,但后来发现开源项目的实现更为简洁。文章重点解析了onScrollChanged()方法,展示了如何通过设置视图的垂直偏移来实现视差滚动,并介绍了API的相关解释。最后,作者总结了实现视差滚动的关键在于动态调整视差视图的位置,而非复杂的速度传递。
摘要由CSDN通过智能技术生成

转载请标明出处:

http://blog.csdn.net/coder_nice/article/details/45311715

视差概念

可能很多人不知道parallax的概念,那就先上一张动态图来看看效果。

视差效果图

有了这张图,大家就应该明白了parallax视差的概念,google paly有这个效果。
相信很多人在看到效果图之后,就想立刻得到链接,好人做到底。
github地址

最初的想法

最初先接到设计师要求的这个效果的时候,我自己先仔细的想了一下,我原本打算用一个FramLayout中包含两层view,下层就是随着滑动出现视差效果的parallax view(其实是滑动速度比较慢),上层就是普通的view层,随着手势的滑动而滑动(跟手势滑动速度一致),然后把上层的滑动速度传递给下层的parallax view,然后把速度值改小一些就好了。可能这也是大多人的想法。
在接触到github上这个开源项目之后,我看了看代码发现不是这样的,远远比这要简单。

源码分析

这里只做最常用的ParallaxScrollView 具有视差效果的 ScrollView的解析,先来看代码。
ParallaxScrollView 源码

public class ParallaxScrollView extends ScrollView {
   

    private static final int DEFAULT_PARALLAX_VIEWS = 1;
    private static final float DEFAULT_INNER_PARALLAX_FACTOR = 1.9F;
    private static final float DEFAULT_PARALLAX_FACTOR = 1.9F;
    private static final float DEFAULT_ALPHA_FACTOR = -1F;
    private int numOfParallaxViews = DEFAULT_PARALLAX_VIEWS;
    private float innerParallaxFactor = DEFAULT_PARALLAX_FACTOR;
    private float parallaxFactor = DEFAULT_PARALLAX_FACTOR;
    private float alphaFactor = DEFAULT_ALPHA_FACTOR;
    private ArrayList<ParallaxedView> parallaxedViews = new ArrayList<ParallaxedView>();

    public ParallaxScrollView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context, attrs);
    }

    public ParallaxScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context, attrs);
    }

    public ParallaxScrollView</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值