解决coordinatorlayout嵌套webView遇到的问题,前端工程师跳槽经验分享

37 阅读1分钟

public NestedScrollWebView(Context context, AttributeSet attrs) {

super(context, attrs);

init();

}

public NestedScrollWebView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

init();

}

private void init() {

mChildHelper = new NestedScrollingChildHelper(this);

setNestedScrollingEnabled(true);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

boolean result = false;

MotionEvent trackedEvent = MotionEvent.obtain(event);

final int action = MotionEventCompat.getActionMasked(event);

if (action == MotionEvent.ACTION_DOWN) {

mNestedYOffset = 0;

}

int y = (int) event.getY();

event.offsetLocation(0, mNestedYOffset);

switch (action) {

case MotionEvent.ACTION_DOWN:

mLastMotionY = y;

startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL);

result = super.onTouchEvent(event);

break;

case MotionEvent.ACTION_MOVE:

int deltaY = mLastMotionY - y;

if (dispatchNestedPreScroll(0, deltaY, mScrollConsumed, mScrollOffset)) {

deltaY -= mScrollConsumed[1];

trackedEvent.offsetLocation(0, mScrollOffset[1]);

mNestedYOffset += mScrollOffset[1];

}

int oldY = getScrollY();

mLastMotionY = y - mScrollOffset[1];

int newScrollY = Math.max(0, oldY + deltaY);

deltaY -= newScrollY - oldY;

if (dispatchNestedScroll(0, newScrollY - deltaY, 0, deltaY, mScrollOffset)) {

mLastMotionY -= mScrollOffset[1];

trackedEvent.offsetLocation(0, mScrollOffset[1]);

mNestedYOffset += mScrollOffset[1];

}

if(mScrollConsumed[1]==0 && mScrollOffset[1]==0) {

trackedEvent.recycle();

result = super.onTouchEvent(trackedEvent);

}

break;

case MotionEvent.ACTION_POINTER_DOWN:

case MotionEvent.ACTION_UP:

case MotionEvent.ACTION_CANCEL:

stopNestedScroll();

result = super.onTouchEvent(event);

break;

}

return result;

}

// NestedScrollingChild

@Override

public void setNestedScrollingEnabled(boolean enabled) {

mChildHelper.setNestedScrollingEnabled(enabled);

}

@Override

public boolean isNestedScrollingEnabled() {

return mChildHelper.isNestedScrollingEnabled();

}

@Override

public boolean startNestedScroll(int axes) {

return mChildHelper.startNestedScroll(axes);

}

@Override

public void stopNestedScroll() {

mChildHelper.stopNestedScroll();

}

@Override

public boolean hasNestedScrollingParent() {

return mChildHelper.hasNestedScrollingParent();

}

@Override

public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow) {

return mChildHelper.dispatchNestedScroll(dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed, offsetInWindow);

}

@Override

public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) {

return mChildHelper.dispatchNestedPreScroll(dx, dy, consumed, offsetInWindow);

}

@Override

public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) {

return mChildHelper.dispatchNestedFling(velocityX, velocityY, consumed);

}

@Override

public boolean dispatchNestedPreFling(float velocityX, float velocityY) {

return mChildHelper.dispatchNestedPreFling(velocityX, velocityY);

}

前端框架

前端框架太多了,真的学不动了,别慌,其实对于前端的三大马车,Angular、React、Vue 只要把其中一种框架学明白,底层原理实现,其他两个学起来不会很吃力,这也取决于你以后就职的公司要求你会哪一个框架了,当然,会的越多越好,但是往往每个人的时间是有限的,对于自学的学生,或者即将面试找工作的人,当然要选择一门框架深挖原理。

以 Vue 为例,我整理了如下的面试题。

Vue部分截图

开源分享:docs.qq.com/doc/DSmRnRG…