alibaba / UltraViewPager

UltraViewPager is an extension for ViewPager to provide multiple features in a single ViewPager.
MIT License
5k stars 680 forks source link

未修改demo , 设置一屏多显不起作用, 还是只能看到一个而非显示上一个和下一个的一部分 #65

Closed zzh1026 closed 6 years ago

zzh1026 commented 7 years ago

未修改demo , 设置一屏多显不起作用, 还是只能看到一个而非显示上一个和下一个的一部分

Ancoding commented 7 years ago

me too

xingshijie commented 7 years ago

@zzh1026 @zzh1026 UltraViewPagerView.java image 上面这部分代码作者应该在改 #53 这个bug时改错了,修改成下面就好了


    public void setMultiScreen(float ratio) {
        multiScrRatio = ratio;
        if (pagerAdapter != null) {
            pagerAdapter.setMultiScrRatio(ratio);
            needsMeasurePage = true;
        }
        float pageMargin = (1 - ratio) * getResources().getDisplayMetrics().widthPixels;
        if (scrollMode == UltraViewPager.ScrollMode.VERTICAL) {
            setPageMargin((int) (pageMargin));
        } else {
            if ((int) pageMargin == 0) {
                setPageMargin(0);
            } else {
                setPageMargin((int) (-(pageMargin + convertDp2Px(getContext(), 1f))));
            }
        }
    }

    private int convertDp2Px(Context context, float dp) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context
                .getResources().getDisplayMetrics());
    }
walkthehorizon commented 6 years ago

public void setMultiScreen(float ratio) { multiScrRatio = ratio; if (pagerAdapter != null) { pagerAdapter.setMultiScrRatio(ratio); needsMeasurePage = true; } float pageMargin = (1 - ratio) * getResources().getDisplayMetrics().widthPixels; setPageMargin((int) (pageMargin)); } 目前可以看到官方是这么写的,我觉得完全没有问题,只是默认将PageMargin设置为了(屏幕宽度-Item宽度),这是非常合理的,上面 @xingshijie 的改造应该没必要,如果你想要调整page之间的距离,在外部直接设置pageMargin就可以了,如下: ultraViewPager.getViewPager().setPageMargin(-300); 这样一屏就可以显示多个,具体的margin还要你自己根据需求来改, @zzh1026

MikeAfc commented 6 years ago

Fixed on version 1.0.7.0