自定义带滑动距离监控和仿iOS回弹效果的NestedScrollView
来源:互联网 发布:沙盒软件 排名 编辑:程序博客网 时间:2024/06/06 01:06
在最近的Support Library更新中(25.3.0),新增或者修复了许多东西,具体可以看revisions,其中有一个新增的动画效果:SpringAnimation 即弹簧动画,SpringAnimation是一个受SpringForce驱动的动画。弹簧力限定了弹簧的刚度,阻尼比以及静止位置。一旦弹簧动画开始,在每一帧上,弹簧力将更新动画的值和速度。动画一直运行,直到弹力达到平衡。如果在动画中使用了无阻尼的弹簧,动画将永远不会达到平衡,永远振荡下去。。。
上代码
import android.content.Context;import android.support.animation.SpringAnimation;import android.support.annotation.Nullable;import android.support.v4.widget.NestedScrollView;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;/** * Created by xuxl on 2017/5/3. */public class SpringScrollView extends NestedScrollView { private float startDragY; private SpringAnimation springAnim; private ScrollViewListener scrollViewListener = null; private View view = null; public SpringScrollView(Context context) { this(context, null); } public SpringScrollView(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public SpringScrollView(Context context, @Nullable AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); springAnim = new SpringAnimation(this, SpringAnimation.TRANSLATION_Y, 0); //刚度 默认1200 值越大回弹的速度越快 springAnim.getSpring().setStiffness(1000.0f); //阻尼 默认0.5 值越小,回弹之后来回的次数越多 springAnim.getSpring().setDampingRatio(2f); }//传view过来 我们的UI要做一个滑动渐变的背景,你们可以看着办 public void setView(View view) { this.view = view; } @Override public boolean onTouchEvent(MotionEvent e) { switch (e.getAction()) { case MotionEvent.ACTION_MOVE: if (getScrollY() <= 0) { //顶部下拉 if (startDragY == 0) { startDragY = e.getRawY(); } if (e.getRawY() - startDragY >= 0) { setTranslationY((e.getRawY() - startDragY) / 3); if (view != null) { float alpha = (float) (e.getRawY() - startDragY) / 3 / DpAndPx.dip2px(150); if (alpha < 0.6) { view.setAlpha(alpha); } else { view.setAlpha((float) 0.6); } } return true; } else { startDragY = 0; springAnim.cancel(); setTranslationY(0); } } else if ((getScrollY() + getHeight()) >= getChildAt(0).getMeasuredHeight()) { //底部上拉 if (startDragY == 0) { startDragY = e.getRawY(); } if (e.getRawY() - startDragY <= 0) { setTranslationY((e.getRawY() - startDragY) / 3); return true; } else { startDragY = 0; springAnim.cancel(); setTranslationY(0); } } break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: if (getTranslationY() != 0) { springAnim.start(); } startDragY = 0; break; } return super.onTouchEvent(e); }//定义一个滑动接口,监听滑动距离 public void setScrollViewListener(ScrollViewListener scrollViewListener) { this.scrollViewListener = scrollViewListener; } @Override protected void onScrollChanged(int l, int t, int oldl, int oldt) { super.onScrollChanged(l, t, oldl, oldt); if (scrollViewListener != null) { scrollViewListener.onScrollChanged(this, l, t, oldl, oldt); } } public interface ScrollViewListener { void onScrollChanged(SpringScrollView scrollView, int x, int y, int oldx, int oldy); }}
0 0
- 自定义带滑动距离监控和仿iOS回弹效果的NestedScrollView
- 学习笔记之——自定义带滑动距离监控和仿iOS回弹效果的ScrollView
- Android中自定义仿IOS回弹效果的ListView
- 仿IOS阻尼回弹效果的ListView
- dcloud-mui 仿ios 向下滑动页面,回弹效果
- Android仿IOS回弹效果 ScrollView回弹
- 自定义控件之------仿ios下拉回弹效果
- 仿ios回弹效果scrollview
- 【No11.】仿IOS界面最常用的回弹效果
- 横向滑动类listview 带回弹效果
- Android仿IOS回弹效果 ScrollView回弹 总结
- Android仿IOS回弹效果 ScrollView回弹 总结
- Android仿IOS回弹效果 ScrollView回弹 总结
- android仿IOS页面回弹效果
- android ListView 仿IOS 回弹效果
- 仿IOS回弹效果支持任何控件
- Android仿IOS式越界回弹效果
- 仿ios全屏滑动解锁,带阴影效果
- zookeeper与dubbo
- hive支持sql大全
- spring笔记2
- OSI七层协议模型和TCP/IP四层模型比较
- setTimeout()和setInterval()的区别
- 自定义带滑动距离监控和仿iOS回弹效果的NestedScrollView
- React.js实现原生js拖拽效果及思考
- 深入Java集合学习系列:HashMap的实现原理
- 归纳迁移学习算法---Adaboost 算法的原理与推导
- poj1113
- 15个高级Java多线程面试题及回答
- .bat批处理文件的延迟环境变量扩展的概念
- HTML 5 视频
- This is my first blog