2013-07-22 32 views
0

我已经扩展了VerticalViewPager版本,并向viewpager添加了旋转过渡动画(使用android.graphics.Camera)。在getChildStaticTransformation施加Android:ViewPager使用带有WebView碎片的getChildStaticTransformation行为奇怪

重要变换代码如下:

@Override 
protected boolean getChildStaticTransformation(View child, Transformation t) { 
    if (child.getHeight() == 0) { 
     return false; 
    } 
    int childPosition = child.getTop()/child.getHeight(); 
    final boolean isFirstOrLast = childPosition == 0 || (childPosition == getAdapter().getCount() - 1); 
    if (childPosition < 0) { 
     return false; 
    } 
    if(isFirstOrLast && childOffsetVals[childPosition] == -1){ 
     childOffsetVals[childPosition] = 0; 
    } 
    int offFactor = 2; 
    float dx = getWidth()/offFactor; 
    int dy = getHeight()/offFactor; 

    if (childOffsetVals[childPosition] > 0) { 
     float rotateX = (ROTATION_FACTOR * childOffsetVals[childPosition]); 
     float translateY = (TRANSLATION_FACTOR * childOffsetVals[childPosition]); 
     t.getMatrix().reset(); 
     mCamera.save(); 
     mCamera.rotateX(rotateX); 
     mCamera.translate(0, translateY, 0); 
     mCamera.getMatrix(t.getMatrix()); 
     mCamera.restore(); 
     t.getMatrix().preTranslate(-dx, -(dy)); 
     t.getMatrix().postTranslate(dx, (dy)); 
    } else if (childOffsetVals[childPosition] < 0 && childOffsetVals[childPosition] > -1) { 
     float rotateX = -(ROTATION_FACTOR * childOffsetVals[childPosition]); 
     float translateY = -(TRANSLATION_FACTOR * childOffsetVals[childPosition]); 
     t.getMatrix().reset(); 
     mCamera.save(); 
     mCamera.rotateX(rotateX); 
     mCamera.translate(0, translateY, 0); 
     mCamera.getMatrix(t.getMatrix()); 
     mCamera.restore(); 
     t.getMatrix().preTranslate(-dx, -(dy * offFactor)); 
     t.getMatrix().postTranslate(dx, (dy * offFactor)); 
    } 
    else { 
     t.getMatrix().reset(); 
     mCamera.save(); 
     mCamera.rotateX(0); 
     mCamera.getMatrix(t.getMatrix()); 
     mCamera.restore(); 
     t.getMatrix().preTranslate(-dx, -dy); 
     t.getMatrix().postTranslate(dx, dy); 
    } 

    if (getChildCount() == 1) { 
     this.invalidate(); 
    } else { 
     child.invalidate(); 
    } 
    return true; 
} 

在最初的实现这种行为的viewpager的每个片段包含只是一个简单的搜索用随机彩色背景。当转换轮换按照需要运行时,我用webview替换了简单的彩色视图(如应用程序所需),并开始测试转换,将每个片段的webview加载到google主页。当我这样做时,我开始在viewpager的转换过程中看到奇怪的行为,当页面经历旋转转换时,webview的内容似乎变成在屏幕上转换的两个页面之间分离,并且每个页面的布局的其余部分仅显示背景的网络视图(我已设置为蓝色)。

下面是(仅使用彩色视图)与最初的实施行动过渡的截图:

enter image description here

正如你可以看到蓝色的页面滚动出顶部和绿色页面正在滚动并且都应用了转换旋转。这是正确的,预期的行为。

当我用webview加载谷歌主页替换彩色视图时,下一个截图取自应用程序。正如我所提到的,每个页面中的webview都不会在转换过程中显示视图的全部内容,而是显示我为背景设置的蓝色。

enter image description here

我已经做了很多搜索在这个网站,试图找到从具有类似的问题,过去有人,但没有发现任何有用的东西。我真的很感谢这里的一些帮助,因为我对这件事发生的原因感到有点困惑,并且无法再花时间在这件事上。如果有人知道为什么会发生这种行为,特别是这种行为是有用的,因为它可能让我想出一个解决方案/解决方法。

我尝试了一些解决方法。其中一个我试图在滚动期间暂停webview并重新启动它,另一个在滚动期间,我用滚动开始时包含webview快照的imageview替换了webview。这些解决方案似乎都不起作用。

我上传了一个视频到YouTube,here,它更清楚地显示了webview滚动问题。

任何帮助/想法/提示将不胜感激。

回答

0

我担心问题出在WebView上,它不是画布转换的好朋友。 您可以尝试拍摄Web视图的快照,并在滚动过程中用快照替换WebView。