我有很多webview要在viewpager中显示。每当我拖动webview时,都会执行invidate()来重绘。如果webview很复杂,重绘需要很长时间,所以滚动不顺畅。尝试将setDrawingCacheEnabled(true)与webview一起使用,但它没有效果。任何人都有想法? 非常感谢!
答案 0 :(得分:1)
有一种想法是调查使用PageChangeListener来检测哪些视图聚焦,以及用户是否正在拖动视图。
PageChangeListener中有一个方法覆盖,如下所示。您可以打开滚动状态以设置一个属性,让您知道何时可以重绘/实例化视图,以及何时不可以。
/**
* Called when the scroll state changes. Useful for discovering when the user
* begins dragging, when the pager is automatically settling to the current page,
* or when it is fully stopped/idle.
*
* @param state The new scroll state.
* @see ViewPager#SCROLL_STATE_IDLE
* @see ViewPager#SCROLL_STATE_DRAGGING
* @see ViewPager#SCROLL_STATE_SETTLING
*/
@Override
public void onPageScrollStateChanged(int state) {
switch (state) {
case ViewPager.SCROLL_STATE_IDLE:
// Allow updating of views by view adapter
this.isAnimating = false;
break;
/**
* Indicates that the pager is currently being dragged by the user
*/
case ViewPager.SCROLL_STATE_DRAGGING:
// do not allow updating of views
this.isAnimating = true;
break;
/**
* Indicates that the pager is in the process of settling to a final position.
*/
case ViewPager.SCROLL_STATE_SETTLING:
this.isAnimating = true;
break;
}
}
将pagechangelistener添加到viewpager很容易。
pageChangeListener = new PageChangeListener(viewIndicator, viewAdapter);
viewPager.setOnPageChangeListener(pageChangeListener);
接下来,我将介绍使用webview可以做什么,以防止在用户主动滚动时重绘。 我想到的一个想法是在Web视图中覆盖invalidate,并且只在用户不滚动时使其无效,并且视图处于空闲状态。