View translation in sliding a ViewPager

前端 未结 4 1143
猫巷女王i
猫巷女王i 2021-02-13 11:26

I was reading an example on customizing ViewPager\'s sliding page animation that entails translating the page(View) to a certain amount. The example is

4条回答
  •  庸人自扰
    2021-02-13 11:49

    If you shrink the rectange by scaleFactor,

    Assume Original Height is pageHeight and Width is pageWidth;

    The new shrink Height will be scaleFactor * pageHeight

    shrinkMarginTopBottom = pageHeight - scaleFactor * pageHeight = pageHeight(1 - scaleFactor);
    
    and I assume it will be equally shirnked from bottom and top;
    
    shrinkMarginTop = shrinkMarginTopBottom/2;
    which is equal to below mentioned formula
    float vertMargin = pageHeight * (1 - scaleFactor) / 2;
    

    So post explaning the margin calculations

    float vertMargin = pageHeight * (1 - scaleFactor) / 2;
    float horzMargin = pageWidth * (1 - scaleFactor) / 2;
    if (position < 0) {
        view.setTranslationX(horzMargin - vertMargin / 2);
    } else {
        view.setTranslationX(-horzMargin + vertMargin / 2);
    }
    

    The x translation should have some offset for page positions 0 and 1 to get the animation effect and some distance hence subtracting the margins for both ... The division happens because +ve and -ve x translation adds up to exact margin

    I may be guessing but for me to have a variable x translation and margin which varies with scale factor, vertMargin is used for creating that offset which varies with scale.. if you remove vertMargin code it will still be animating the same but a bit faster but without keeping any margin between two pages.

提交回复
热议问题