Android 在ViewPager内水平滚动webview

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);

我已经把一个网络视图加载到了一个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)中,引入了
视图
方法
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吗?