今天是实现了一个小功能的东西。看看效果图:


实现方式:
1.自己定义ScrollView   复写onScrollChange方法,来计算滑动的位置。
2.自己定义接口,通过接口来在ScrollView中控制,滑动的高度的进度。
3.在自己定义View中去运行动画。



代码实现:
1.ScrollView   最基本的代码仅仅有计算滑动位置的代码了,事实上也是非常easy的。获取子View的个数。每次都去for循环,去计算字View的位置,以及当前ScrollView的top bottom
代码:

@Override
    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
        super.onScrollChanged(l, t, oldl, oldt);
        int currentBottom = t + height ;
        int currentTop = t ; 
        Log.e("Slide", "onScrollChange") ;
        
        for (int i = 0; i < childCount; i++) {
            View childView = contentLayout.getChildAt(i )  ;
            if (!(childView  instanceof EasySlideInter)) {
                continue ; 
            }
            int childTop = childView.getTop() ; 
            int childBottom = childView.getBottom() ;
            int childHeight = childView.getHeight() ; 
            EasySlideInter inter = (EasySlideInter) childView ; 
            if ( currentTop > childTop && currentTop < childBottom ) {
                inter.contentSlide(countProgress(currentTop, childBottom, childHeight)); 
            }else if (currentBottom > childTop && currentBottom < childBottom ) {
                inter.contentSlide(100 - countProgress(currentBottom, childBottom, childHeight)); 
            }else if(childTop >= currentTop && childBottom <= currentBottom){
                inter.resetContent();
            }
        }

}  



通过childView的top位置与ScrollView的当前的top位置来推断是哪个子View正在慢慢的出现,计算出progress 传递给子View中去。

事实上终于要的代码就是这么一段,动画的运行都在子View的接口方法中去做的。
我贴上一个子View的实现:
    
    @Override
    public void contentSlide(int progress) {
        textAnimator.setCurrentPlayTime(progress);
        backAnimator.setCurrentPlayTime(progress);
    }
    @Override
    public void resetContent() {
        textAnimator.setCurrentPlayTime(100);
        backAnimator.setCurrentPlayTime(100);
    }
    
    
    private void initAnimation(){
        textAnimator = ObjectAnimator.ofInt(text, "textColor", Color.BLUE , Color.RED); 
        textAnimator.setEvaluator(new ArgbEvaluator());
        textAnimator.setDuration(100)  ;
        textAnimator.setInterpolator(new LinearInterpolator()) ;
        
        backAnimator = ObjectAnimator.ofInt(this, "backgroundColor", Color.BLACK , Color.BLUE , Color.BLACK); 
        backAnimator.setEvaluator(new ArgbEvaluator());
        backAnimator.setDuration(100)  ;
        backAnimator.setInterpolator(new LinearInterpolator()) ;
        

}  

实现两个接口的方法,在这两个方法中,去控制动画的进度。
非常easy的,不再累赘叙述了。
源代码下载:
百度网盘:  http://pan.baidu.com/s/1dDtVzSt 


随着ScrollView的滑动,渐渐的运行动画View的更多相关文章

  1. 随着ScrollView的滑动,渐渐的执行动画View

    今天是实现了一个小功能的东西.看看效果图: 实现方式: 1.自定义ScrollView   复写onScrollChange方法,来计算滑动的位置. 2.自定义接口,通过接口来在ScrollView中 ...

  2. Android 解决下拉刷新控件和ScrollVIew的滑动冲突问题。

    最近项目要实现ScrollView中嵌套广告轮播图+RecyleView卡片布局,并且RecyleView按照header和内容的排列样式,因为RecyleView的可扩展性很强,所以我毫无疑问的选择 ...

  3. android中随着ScrollView的滑动,titleBar状态的改变

    今天项目有一个需求,,类是于QQ空间里面的一个功能,于是就研究了一下,嗯,说这么多,可能还有人不知道指的是那个,直接上效果图.见谅,不会弄动态图:   对,就是这种效果,我研究了一下,思路如下: 1. ...

  4. 全新jquery多点滑动幻灯片——全屏动画animateSlide

    首页banner的酷炫效果多来自全屏大图的幻灯片动画,下面提供一种完美兼容的jquery动画特效:全新jquery多点滑动幻灯片——全屏动画animateSlide(代码完全原创). 直接上代码,把h ...

  5. 改动ScrollView的滑动速度和解决ScrollView与ViewPager的冲突

    话不多说,非常easy,能够从凝视中知道做法,直接上代码: 1.改动ScrollView的滑动速度: public class MyHorizontalScrollView extends Horiz ...

  6. Android 自定义ScrollView的滑动监听事件

    项目结构: 1.LazyScrollView类(自定义ScrollView) package android.zhh.com.myapplicationscrollview; /** * Create ...

  7. Android实践之ScrollView中滑动冲突处理

    转载注明出处:http://blog.csdn.net/xiaohanluo/article/details/52130923 1. 前言 在Android开发中,假设是一些简单的布局.都非常easy ...

  8. jQuery---jQ动画(普通,滑动,淡入淡出,自定义动画,停止动画),jQuery的事件,jQ事件的绑定/解绑,一次性事件,事件委托,事件冒泡,文档加载

    jQuery---jQ动画(普通,滑动,淡入淡出,自定义动画,停止动画),jQuery的事件,jQ事件的绑定/解绑,一次性事件,事件委托,事件冒泡,文档加载 一丶jQuery动画 show,hide, ...

  9. 判断scrollView的滑动方向(二)

    在上一篇文章<判断scrollView的滑动方向>中谈到的第二种方法是根据滑动速率来判断的. 今天将通过滑动过程中的坐标差来判断 - (void)scrollViewDidScroll:( ...

随机推荐

  1. Python3中super()的参数传递

    1. super([type[, object-or-type]]) super() 在使用时至少传递一个参数,且这个参数必须是一个类. 通过super()获取到的是一个代理对象,通过这个对象去查找父 ...

  2. php 上传文件名出现乱码

    想必很多朋友在进行utf8编码的php开发上传功能的时候,都会遇到这样的一个问题,就是上传中文文件名的文件时,文件名会变成乱码,其实我们可以用iconv函数对文件名进行重新编码就解决问题了 可能会有不 ...

  3. 九度oj 题目1139:最大子矩阵

    题目描述: 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的矩阵 0 -2 -7 0 9 2 -6 2 -4 1 ...

  4. Codeforces 547B. Mike and Feet[单调栈/队列]

    这道题用单调递增的单调栈维护每个数能够覆盖的最大区间即可. 对于   1 2 3 4 5 4 3 2 1 6 这组样例, 1能够覆盖的最大区间是10,2能够覆盖的最大区间是7,以此类推,我们可以使用单 ...

  5. 【bzoj4605】崂山白花蛇草水 权值线段树套KD-tree

    题目描述 神犇Aleph在SDOI Round2前立了一个flag:如果进了省队,就现场直播喝崂山白花蛇草水.凭借着神犇Aleph的实力,他轻松地进了山东省省队,现在便是他履行诺言的时候了.蒟蒻Bob ...

  6. 【Luogu】P2258子矩阵(状态压缩,DP)

    233今天蒟蒻我连文化课都没听光想着这个了 然后我调了一下午终于过了!!! 一看数据范围似乎是状压,然而216等于65536.开一个65536*65536的二维数组似乎不太现实. 所以Rqy在四月还是 ...

  7. 有大神告诉我为什么pymysql导入失败

    import json import requests import pymysql url = 'https://xueqiu.com/v4/statuses/public_timeline_by_ ...

  8. GTY's birthday gift【矩阵快速幂】

    题目大意:GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法k次,每次可以向可重集中加入一个数 a+b ...

  9. 【HDOJ6228】Tree(树)

    题意:有一棵n个点的树,在树上的点涂色,每个点涂一种颜色,一共可以涂k种颜色, 然后把同一种颜色(比如说x)的点用最优方案连起来,在连线的边涂上x颜色,问涂k次的边最多有几条 k<=500 si ...

  10. javascript 日期处理类库 moment.js