[英]Scroll webview horizontally inside a ViewPager
我把一個WebView加載到ViewPager中的圖像。 當我嘗試水平滾動圖像時,我移動到下一個視圖而不是滾動圖像。
是否可以在移動到下一個視圖之前滾動到圖像的末尾?
@Override
public Object instantiateItem(View view, int i) {
WebView webview = new WebView(view.getContext());
webview.setHorizontalScrollBarEnabled(true);
webview.loadUrl("http://www.site.with.an/image.gif");
((ViewPager) view).addView(webview, 0);
return webview;
}
以下是一個真正有效的解決方案,只要它可以滾動,它將在水平滑動上滾動WebView
。 如果WebView
無法進一步滾動,則ViewPager
將使用下一個水平滑動來切換頁面。
WebView
使用API級別14(ICS),引入了View
方法canScrollHorizontally()
,我們需要解決該問題。 如果您僅為ICS或更高版本開發,則可以直接使用此方法並跳到下一部分。 否則,我們需要自己實現此方法,以使解決方案也適用於ICS之前。
為此,只需從WebView
派生自己的類:
public class ExtendedWebView extends WebView {
public ExtendedWebView(Context context) {
super(context);
}
public ExtendedWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public boolean canScrollHor(int direction) {
final int offset = computeHorizontalScrollOffset();
final int range = computeHorizontalScrollRange() - computeHorizontalScrollExtent();
if (range == 0) return false;
if (direction < 0) {
return offset > 0;
} else {
return offset < range - 1;
}
}
}
重要提示:請記住在布局文件中引用ExtendedWebView
而不是標准WebView
。
ViewPager
現在,您需要擴展ViewPager
以正確處理水平滑動。 無論如何,無論您是否使用ICS,都需要這樣做:
public class WebViewPager extends ViewPager {
public WebViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
if (v instanceof ExtendedWebView) {
return ((ExtendedWebView) v).canScrollHor(-dx);
} else {
return super.canScroll(v, checkV, dx, x, y);
}
}
}
重要提示:請記住在布局文件中引用WebViewPager
而不是標准ViewPager
。
而已!
更新2012/07/08:我最近注意到,在使用ViewPager
的“當前”實現時,似乎不再需要上面顯示的ViewPager
。 “當前”實現似乎在捕獲滾動事件之前正確檢查子視圖(請參閱此處的ViewPager
canScroll
方法)。 不確切地知道,當實現已經改變以正確處理這個問題 - 我仍然需要Android Gingerbread(2.3.x)及之前的代碼。
雖然Sven提到布局文件我想添加細節。 在擴展Webview和ViewPager類之后,
在您的活動中,您將像這樣投射到您的擴展類:
web = (MyWebView) findViewById(R.id.webview);
在您的布局文件中,如下所示:
<your.package.name.MyWebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.