Android 自定义控件 轻松实现360软件详情页(4)

@Override
 public void computeScroll()
 {
  if (mScroller.computeScrollOffset())
  {
   scrollTo(0, mScroller.getCurrY());
   invalidate();
  }
 }

ok,到此,我们的onTouchEvent搞定了~~but,别得意,为什么这么说呢?因为你完成的,知识当然View对于上下拖动的处理。大家别忘了,我们当前的StickyNavLayout内部可是有一个ScrollView的,那么根据事件的转发机制,这个内部的ScrollView肯定会处理上下拖动这种情况的,也就是我们的事件会被它拦截。

4、onInterceptTouchEvent

好了,接下来我们要处理拦截,对于拦截,我们要清楚的知道什么时候应该拦截,什么时候不需要,当前我们的例子:

1、如果我们的顶部view只要没有完全隐藏,那么直接拦截上下的拖动;

2、还有个需要拦截的地方,就是当顶部的view彻底隐藏了,我们现在内部的sc应该可以上下滑动了,但是如果sc滑动到顶部再往下的时候,此时又该拦截了,我们需要把顶部view可以下滑出来。

分析完成以后,看代码,这叫一个酸爽:

@Override
 public boolean onInterceptTouchEvent(MotionEvent ev)
 {
  int action = ev.getAction();
  float y = ev.getY();

switch (action)
  {
  case MotionEvent.ACTION_DOWN:
   mLastY = y;
   break;
  case MotionEvent.ACTION_MOVE:
   float dy = y - mLastY;

getCurrentScrollView();

if (Math.abs(dy) > mTouchSlop)
   {
    mDragging = true;
    if (!isTopHidden
      || (mInnerScrollView.getScrollY() == 0 && isTopHidden && dy > 0))
    {
     return true;
    }
   }
   break;
  }
  return super.onInterceptTouchEvent(ev);
 }

ok,move中判断上述两种情况,o了。

如有bug,欢迎提出。本文源码下载在下

------------------------------------------分割线------------------------------------------

免费下载地址在

用户名与密码都是

具体下载目录在 /2015年资料/2月/16日/Android 自定义控件 轻松实现360软件详情页/

下载方法见

------------------------------------------分割线------------------------------------------

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/3ad01d53e22f3c56cd5518aaee927350.html