public class DampingScrollView extends ScrollView{ private View activityView; //activity传递进来的View用来控制其高度(可以是ImageView、TextView 等) private Scroller mScroller; // /** 回弹时所用的时间 */ private static final int DURATION = 100; /** 最大Y坐标 其值一般设定为Scroller对应控件的高度 */ private static final int MAX_DY = 100; TouchTool tool; int left, top; float startX, startY, currentX, currentY; int imageViewH; int rootW, rootH; boolean scrollerType; public DampingScrollView(Context context, AttributeSet attrs) { super(context, attrs); mScroller=new Scroller(context); } public DampingScrollView(Context context) { super(context); mScroller=new Scroller(context); } public void setActivityView(View activityView) { //设置要改变高度的视图 this.activityView = activityView; } @Override public boolean onTouchEvent(MotionEvent event) { int action = event.getAction(); if (!mScroller.isFinished()) { return super.onTouchEvent(event); } currentX = event.getX(); currentY = event.getY(); switch (action) { case MotionEvent.ACTION_DOWN:// 变量赋初始值 left = activityView.getLeft();
自定义ScrollView实现阻尼效果(类似于QQ下拉一段距离)
本文探讨如何利用Scroller对象的startScroll和computeScrollOffset方法,结合自定义ViewGroup的computeScroll方法,实现类似QQ的下拉阻尼滚动效果。通过在computeScroll方法中不断调用postInvalidate,实现滚动动画直至Scroller完成动画。
摘要由CSDN通过智能技术生成