Try it,
- create layout file
content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="9">
<com.pramod.webviewdemo.ObservableWebView
android:id="@+id/webViewOriginal"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="4"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Second View"/>
<WebView
android:id="@+id/webViewMirror"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="5"/>
</LinearLayout>
- Create a class
ObservableWebViewfor the handle event fromoriginalWebview
public class ObservableWebView extends WebView
{
private OnScrollChangedCallback mOnScrollChangedCallback;
public ObservableWebView(final Context context)
{
super(context);
}
public ObservableWebView(final Context context, final AttributeSet attrs)
{
super(context, attrs);
}
public ObservableWebView(final Context context, final AttributeSet attrs, final int defStyle)
{
super(context, attrs, defStyle);
}
@Override
protected void onScrollChanged(final int l, final int t, final int oldl, final int oldt)
{
super.onScrollChanged(l, t, oldl, oldt);
if(mOnScrollChangedCallback != null) mOnScrollChangedCallback.onScroll(l, t);
}
public OnScrollChangedCallback getOnScrollChangedCallback()
{
return mOnScrollChangedCallback;
}
public void setOnScrollChangedCallback(final OnScrollChangedCallback onScrollChangedCallback)
{
mOnScrollChangedCallback = onScrollChangedCallback;
}
public static interface OnScrollChangedCallback
{
public void onScroll(int l, int t);
}
}
- Update
MainActivity.javawith
public class MainActivity extends AppCompatActivity {
private WebView webViewMirror;
private ObservableWebView webViewOriginal;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_main);
webViewOriginal = (ObservableWebView)findViewById(R.id.webViewOriginal);
webViewMirror = (WebView)findViewById(R.id.webViewMirror);
webViewOriginal.getSettings().setLoadsImagesAutomatically(true);
webViewOriginal.getSettings().setJavaScriptEnabled(true);
webViewOriginal.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webViewOriginal.getSettings().setLoadsImagesAutomatically(true);
webViewOriginal.getSettings().setJavaScriptEnabled(true);
webViewOriginal.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webViewOriginal.setWebViewClient(new WebClientForOriginal());
webViewMirror.setWebViewClient(new WebClientForMirror());
webViewOriginal.setOnScrollChangedCallback(new ObservableWebView.OnScrollChangedCallback() {
public void onScroll(int x, int y) {
Log.d("MainActivity", "We Scrolled etc..." + " X " + x + " Y " + y);
webViewMirror.scrollTo(x,y);
}
});
webViewMirror.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return true;
}
});
webViewOriginal.loadUrl("http://www.google.com");
webViewMirror.loadUrl("http://www.google.com");
}
private class WebClientForOriginal extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
webViewMirror.loadUrl(url);
return true;
}
}
private class WebClientForMirror extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
}
}
source
share