每一次触摸时我会生成当前点击像素的位图拿到当前点击的点的透明度
之后回收位图 根据透明度调用事先设置的回调即可
事件分发到onTouchEvent即可根据回调的状态 设置拦截还是分发事件给native
PS: 考虑到业务场景的不同 定制程度比较高的应用 建议实现属于自己的扩展
(这里存在的问题是动态特效弹窗详情下,触摸会出现卡顿,各位大佬如果有更好的方案,请在评论区留下您宝贵的建议)
2.默认内置JS原生交互方式
/**
- 混合开发管理 用户可自定义
*/
public interface HybirdManager {
//注入JSBridge 时机在onreceivetitle
void injectJsBridge(WebView webView,String jsName);
//调用本地提供的基础服务 时机 1.jsprompt 2.post请求 3.原生 4.shouldOverrideUrlLoading
void invokeAppServices(String instruction) ;
//加入JS中android本地对象 时机webview初始化
void addUpJavaNativeJSInterface(WebView webView, String windowObjName);
}
对于Webview弹窗来说与JS的交互是不可缺少的,市面上有许多与JS交互的框架,Android同样有着原生支持,支持用户自定义与弹窗交互的方式,也同样提供了基于JSBridge和原生的默认交互实现,可根据业务与喜好择一使用
这里为了说明方便将下文的交互概念稍微统一
原生调H5为提供基础扩展,同理H5调原生为调用基础服务
中提供了默认的基础服务组件 PopWebViewService
主要包含弹窗 显示和消失等基本功能 和适合各个项目的统一路由服务
当网页显示的时候 我们可以在web调试器console中看到DOM对象的属性
PS: 这里的路由 JS传的是调用客户端服务的基础协议 这个协议由jsbridge内部形成 类似结构router://type=xxx?value=yyy,是由用户根据其业务决定的
内置JSbridge
框架中已经内置了Jsbridge,这里就不贴出代码一一说明了
简单的放一张原理图阐述双端的交互机制