Android 在ViewPager内水平滚动webview
我已经把一个网络视图加载到了一个ViewPager中。当我尝试水平滚动图像时,我会移到下一个视图,而不是滚动图像 在转到下一个视图之前,是否可以将其滚动到图像的末尾Android 在ViewPager内水平滚动webview,android,scroll,android-webview,android-viewpager,Android,Scroll,Android Webview,Android Viewpager,我已经把一个网络视图加载到了一个ViewPager中。当我尝试水平滚动图像时,我会移到下一个视图,而不是滚动图像 在转到下一个视图之前,是否可以将其滚动到图像的末尾 @Override public Object instantiateItem(View view, int i) { WebView webview = new WebView(view.getContext()); webview.setHorizontalScrollBarEnabled(true);
@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)中,引入了视图方法canscroll()
,这是我们需要解决的问题。如果您仅为IC或更高版本开发,您可以直接使用此方法并跳到下一节。否则,我们需要自己实现这种方法,以使解决方案也能在预集成电路上工作
为此,只需从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;
}
}
}
重要提示:记住在布局文件中引用您的WebViewPager
,而不是标准的ViewPager
就这样强>
更新2012/07/08:我最近注意到,在使用ViewPager的“当前”实现时,似乎不再需要上面显示的内容。“当前”实现似乎在自己捕获滚动事件之前正确地检查了子视图(请参见canScroll
方法ViewPager
)。不知道具体是什么时候更改了实现以正确处理此问题——我仍然需要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"
/>
在布局文件中,如下所示:
web = (MyWebView) findViewById(R.id.webview);
<your.package.name.MyWebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
如果webview包含具有旋转地球仪等旋转功能的java脚本,该功能是否有效?@Ads:还没有尝试过此功能,您需要自己尝试,抱歉。谢谢!我在VerticalViewPager使用了您基于Martin Sonc的Froyo+项目的verical scroll内部网络视图解决方案。尝试此计算机时,HorizontalScrollRange()始终返回0。computerHorizontalScrollRange()和computerHorizontalScrollExtent总是返回相同的值(1200)。我看到的是与“android_学生”相同的值,例如computerHorizontalScrollRange()总是返回0,因此对于“canScrollHor”,它总是返回false。知道为什么总是返回0吗?