WebView的自定义,在此记录。 感谢http://blog.youkuaiyun.com/qq840727854/article/details/53117587博主的分享。
public class demo extends WebView implements NestedScrollingChild { private NestedScrollingChildHelper helper; private int mLastDownY; private int mLastDownX; //done 的坐标 0->x 1->y private int[] mDoneSet =new int[2]; private int[] cums = new int[2]; private int[] offset = new int[2]; public demo(Context context){ super(context); init(); } public demo(Context context , AttributeSet attr){ super(context,attr); init(); } private void init(){ helper = new NestedScrollingChildHelper(this); setNestedScrollingEnabled(true); } @Override public boolean onTouchEvent(MotionEvent event) { Log.e("lxy","ontouchEvent"); if (event.getAction() == MotionEvent.ACTION_DOWN){ mDoneSet[0]=0; mDoneSet[1]=0; } switch (event.getAction()){ case MotionEvent.ACTION_DOWN: Log.e("lxy","down"); mLastDownX = (int) event.getX(); mLastDownY = (int) event.getY(); startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL); break; case MotionEvent.ACTION_MOVE: Log.e("lxy","move"); final int X =(int) event.getX(); final int Y =(int) event.getY(); //>0 是向下滑动,<0是向上滑动 int dy = mLastDownY -Y; //>0是向左滑动,<0是向右滑动 int dx = mLastDownX-X; if(dispatchNestedPreScroll(0,90,cums,offset)){ dx -=cums[0]; //?? dy -=cums[1];//?? mDoneSet[0] += offset[0]; //??? mDoneSet[1] += offset[1]; //??? } Log.e("lxy","getScrollY="+getScrollY()+"-----getScrollX="+getScaleX()); if (getScrollY()+dy >0){ scrollTo(dx,dy+getScrollY()); dispatchNestedScroll(0,dy,dx,0,mDoneSet); }else{ if(getScrollY()>0){ scrollBy(0,-getScrollY()); dispatchNestedScroll(0,getScrollY(),dx,dy-getScrollY(),mDoneSet); } scrollTo(0,0); } mLastDownY = Y-offset[1]; mLastDownX = X-offset[0]; break; case MotionEvent.ACTION_UP: stopNestedScroll(); break; } return true; } @Override public void setNestedScrollingEnabled(boolean enabled) { super.setNestedScrollingEnabled(enabled); } @Override public void stopNestedScroll() { super.stopNestedScroll(); } @Override public boolean startNestedScroll(int axes) { return super.startNestedScroll(axes); } @Override public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) { return super.dispatchNestedPreScroll(dx, dy, consumed, offsetInWindow); } @Override public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow) { return super.dispatchNestedScroll(dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, offsetInWindow); }}