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

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

实现方式:

1.自定义ScrollView   复写onScrollChange方法,来计算滑动的位置。

2.自定义接口,通过接口来在ScrollView中控制,滑动的高度的进度。

3.在自定义View中去执行动画。

代码实现:

1.ScrollView   最主要的代码只有计算滑动位置的代码了,其实也是很简单的,获取子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()) ;

}

实现两个接口的方法,在这两个方法中,去控制动画的进度。

很简单的,不再累赘叙述了。

源码下载:

百度网盘:  http://pan.baidu.com/s/1dDtVzSt

github地址 : https://github.com/flyme2012/EasySlide

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-30 04:46:56

随着ScrollView的滑动,渐渐的执行动画View的相关文章

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

最近项目要实现ScrollView中嵌套广告轮播图+RecyleView卡片布局,并且RecyleView按照header和内容的排列样式,因为RecyleView的可扩展性很强,所以我毫无疑问的选择了它,而且让RecyleView实现了可拖拽的效果, 最后我再加上了下拉刷新的效果(这里我用的下拉刷新控件是三方的SmartRefreshLayout).记得刚开始实现这个效果的时候还是十分的得心印手.可是当我测试的时候,发现RecyleView的子item的拖拽效果并不流畅,起初我以 为是由于Re

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

最近项目要实现ScrollView中嵌套广告轮播图+RecyleView卡片布局,并且RecyleView按照header和内容的排列样式,因为RecyleView的可扩展性很强,所以我毫无疑问的选择了它,而且让RecyleView实现了可拖拽的效果, 最后我再加上了下拉刷新的效果(这里我用的下拉刷新控件是三方的SmartRefreshLayout).记得刚开始实现这个效果的时候还是十分的得心印手.可是当我测试的时候,发现RecyleView的子item的拖拽效果并不流畅,起初我以 为是由于Re

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

转载注明出处:http://blog.csdn.net/xiaohanluo/article/details/52130923 1. 前言 在Android开发中,假设是一些简单的布局.都非常easy搞定.可是一旦涉及到复杂的页面,特别是为了兼容小屏手机而使用了ScrollView以后,就会出现非常多点击事件的冲突.最经典的就是ScrollView中嵌套了ListView. 我想大部分刚開始接触Android的同学们都踩到过这个坑,这一篇文章就从近期做的一个项目讲起.然后在过程中提供一些解决冲突

[ jquery选择器 :animated ] 此选择器匹配所有正在执行动画效果的元素

此选择器匹配所有正在执行动画效果的元素 实例: <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content='this is my page'> <meta http-equiv='keywords' content='keyword1,keyword2,keyw

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

话不多说,非常easy,能够从凝视中知道做法,直接上代码: 1.改动ScrollView的滑动速度: public class MyHorizontalScrollView extends HorizontalScrollView { public MyHorizontalScrollView(Context context) { super(context); } public MyHorizontalScrollView(Context context, AttributeSet attrs

setAnimationTransition:forView:cache: 执行动画时背景色问题

一.起因 最近在玩Boost库.当然首先是要进行Booist库的安装和配置.于是浅墨Google了一下boost库的安装配置攻略,下载了最新版1.55的boost库,就愉悦地开始进行配置了. 当进行到第五步,要在VS命令提示符中运行bootstrap.bat的时候,问题就来了,按着攻略打开Visual Studio2010命令提示符,就迎面报错: "Setting environment for using MicrosoftVisual Studio. 此时不应有\Mirosoft"

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

话不多说,很简单,可以从注释中知道做法,直接上代码: 1.修改ScrollView的滑动速度: public class MyHorizontalScrollView extends HorizontalScrollView { public MyHorizontalScrollView(Context context) { super(context); } public MyHorizontalScrollView(Context context, AttributeSet attrs, i

PageSlider中CSS3动画在除首屏之外先加载页面后执行动画的问题

PageSlider中CSS3动画在除首屏之外先加载页面后执行动画的问题,PageSlider中加入CSS3动画的话,默认只有首屏是从无到有执行动画,其他屏都是显示下页面再执行动画 这就造成其他屏的动画展示效果不好,解决方法,让所有屏的背景可见,但是只要当前屏的元素可见; 上代码: .page { width: 100%; height: 100%; -webkit-backface-visibility: hidden; -webkit-perspective: 1000; div, ul,

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

今天项目有一个需求,,类是于QQ空间里面的一个功能,于是就研究了一下,嗯,说这么多,可能还有人不知道指的是那个,直接上效果图.见谅,不会弄动态图: 对,就是这种效果,我研究了一下,思路如下: 1.监听ScrollView的滑动 2.通过判断滑动的距离,然后给titleBar设置相应的颜色渐变 但是后来我发现我找不到ScrollView的监听器,也就是说,ScrollView没有对外提供相应的监听接口,不提供就算了嘛,我我自己提供于是就出现了下面这段代码: package com.example.