Hoa*_*ynh 20 html android webview swipe android-viewpager
我有一个包含许多子视图的viewpager; 每个子视图都是一个webview.每个webview都有一些用户可以与之交互的HTML对象; 例如,可以在滑动手势或可拖动的圆圈上工作的幻灯片,用户可以在HTML画布上移动.
问题是当用户对这些HTML对象执行手势时,viewpager会滚动到下一个视图.我希望HTML对象在用户与它们交互时工作(viewpager不滚动),以及当用户在其他地方滑动时滚动的viewpager.我怎样才能做到这一点?

PS我已经使用event.preventDefault()和event.stopPropagation()在HTML幻灯片与希望的JavaScript代码的网页流量不会通过触摸事件父viewpager.
重写"canScroll"您的方法ViewPager并仅当视图不是 的实例时才允许滚动WebView。
样本:
public class MyViewPager extends ViewPager {
public MyViewPager (Context context) {
super(context);
}
public MyViewPager (Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
if(v instanceof WebView){
return true;
}
return super.canScroll(v, checkV, dx, x, y);
}
}
Run Code Online (Sandbox Code Playgroud)
创建您自己的 ViewPager 子类并覆盖 canScroll,如下所示。
class MyViewPager extends ViewPager {
...
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
if (isInsideSlideShow(x,y)) {
return true; // allow the slide show its own scrolling
} else {
return false; // ViewPager scrolls
}
}
Run Code Online (Sandbox Code Playgroud)
您当然需要知道幻灯片放映覆盖了屏幕的哪一部分。这些知识必须在 isInsideSlideShow 方法中实现。
如果您无法获取幻灯片放映的 x/y 坐标,另一种解决方案可能是使用从视图边界开始的手势作为分页手势,以及使用从内部区域开始的手势作为幻灯片放映手势。
我将这种方法用于显示地图和图表的视图寻呼机。两者都支持自己的平移。但是当用户在左边界或右边界开始手势时,整个地图或图形就会滑开:
@Override
protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) {
int width = getWidth();
int slideWidth = Math.round(width * 0.15f);
if (x < slideWidth || x > width - slideWidth) {
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5344 次 |
| 最近记录: |