地址
使用
How to use?
Step1
Add the JitPack repository to your build file
allprojects {
repositories {
...
maven { url 'https://www.jitpack.io' }
}
}
Step2
Add the dependency
dependencies {
compile 'com.github.JmStefanAndroid:Mu5ViewPager:1.2'
}
优点
1.实现了自主加载图片的回调,可以选择使用自己想用的图片加载框架或者自己撸一个。
@Override
public void onLoadImage(final ImageView imageView, String url, final int position) {
Glide.with(getApplicationContext()).load(url).asBitmap().into(new ImageViewTarget<Bitmap>(imageView) {
@Override
protected void setResource(Bitmap loadedImage) {
mu5ViewPager.bindSource(loadedImage, position, imageView);
}
});
}
2.替换成本:在原ViewPager普通使用的情况下,如果你注册了OnPageChangeListener
监听,使用该ViewPager仍然可以通过setUserCustomPageChangeListener(OnPageChangeListener userCustomPageChangeListener)
,设置自己自定义的OnPageChangeListener
,这里可以监听到你想要的ViewPager的事件回调。
原理
原理非常简单,就是监听了ViewPager
的滚动,并且在OnPageChangeListener
事件的onPageScrolled方法中,实现了高度的计算,并且将这个值动态设置给了ViewPager
。
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (position == sourceHeights.length - 1 || defaultHeight == 0) {//用于defaultHeight初始化之前的拦截,即等到获取到第一张图片再做操作
return;
}
//计算ViewPager即将变化到的高度
int height = (int) ((sourceHeights[position] == 0 ? defaultHeight : sourceHeights[position]) * (1 - positionOffset)
+ (sourceHeights[(position + 1)] == 0 ? defaultHeight : sourceHeights[(position + 1)]) * positionOffset);
//为ViewPager设置高度
ViewGroup.LayoutParams params = Mu5ViewPager.this.getLayoutParams();
params.height = height;
Mu5ViewPager.this.setLayoutParams(params);
...
}
}