解决在ScrollView中使用固定高度的WebView的冲突
程序员文章站
2022-06-08 17:56:33
...
**
解决在ScrollView中使用固定高度的WebView的冲突
**
废话不多说直接上代码,看注释
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
/**
* WebView固定高度
* 解决webview在ScrollView里面的滑动冲突
*/
public class ScrollWebView extends WebView {
/**
* 手指按下的y坐标
*/
private int downY = 0;
/**
* 外部可以滚动的ViewGroup
*/
private ViewGroup parentView;
public ScrollWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//手指按下的时候记录y
downY = (int) event.getRawY();
}
callback.callback(this, event);
return super.onTouchEvent(event);
}
/**
* true 向上滑动 false 表示正在向下滑动
*
* @param event
* @return
*/
public boolean isMoveUp(MotionEvent event) {
int y = (int) event.getRawY();
if (y > downY) {
return true;
}
return false;
}
/**
* 在外面设置parentView 要可以滚动的
*
* @param parentView
*/
public void setParentView(ViewGroup parentView) {
this.parentView = parentView;
}
/**
* 回调执行的具体内容
*/
Callback callback = new Callback() {
@Override
public void callback(View v, MotionEvent event) {
//手指UP操作的时候 停止WebView的触摸事件
if (event.getAction() == MotionEvent.ACTION_UP) {
//返回false表是停止WebView的触摸事件 true开始WebView的触摸事件
parentView.requestDisallowInterceptTouchEvent(false);
} else {
boolean isTop = canScrollVertically(-1);//false 表示到达顶部
boolean isBottom = canScrollVertically(1);//false 表示到达底部
if (!isTop) {
if (isMoveUp(event)) parentView.requestDisallowInterceptTouchEvent(false);
else parentView.requestDisallowInterceptTouchEvent(true);
} else if (!isBottom) {
if (!isMoveUp(event)) parentView.requestDisallowInterceptTouchEvent(false);
else parentView.requestDisallowInterceptTouchEvent(true);
} else {
parentView.requestDisallowInterceptTouchEvent(true);
}
}
}
};
/**
* 回调
*/
public interface Callback {
void callback(View v, MotionEvent event);
}
}
复制了可以直接使用
注意setParentView方法最好在WebView.loadUrl前调用 不然可能会报空指针异常
您的回复是我最大的动力
上一篇: 八皇后【洛谷】