Spi*_*iff 27 android scroll android-webview android-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;
}
Run Code Online (Sandbox Code Playgroud)
sve*_*ven 42
以下是一个真正有效的解决方案,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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
重要提示:请记住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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
重要提示:请记住WebViewPager在您的布局文件中引用您的内部而不是标准ViewPager.
而已!
更新2012/07/08:我最近注意到,使用"当前"实现时,上面显示的内容似乎不再需要了ViewPager."当前"实现似乎在捕获滚动事件之前正确检查子视图(参见此处的canScroll方法).不确切地知道,当实现已经改变以正确处理这个问题 - 我仍然需要Android Gingerbread(2.3.x)及之前的代码.ViewPager
| 归档时间: |
|
| 查看次数: |
20701 次 |
| 最近记录: |