我正在使用安卓的ViewPager
。我的需求是在左右两边都显示页面的预览。我已经发现可以使用负数的pageMargin
来实现右侧预览的效果。
setPageMargin(-100);
有没有办法也显示左侧的预览?我正在寻找类似于相册小部件的东西。
我正在使用安卓的ViewPager
。我的需求是在左右两边都显示页面的预览。我已经发现可以使用负数的pageMargin
来实现右侧预览的效果。
setPageMargin(-100);
有没有办法也显示左侧的预览?我正在寻找类似于相册小部件的东西。
android:overScrollMode="never"
设置为ViewPager来禁用边缘效果,或者使用稍微修改过的EdgeEffect类修复该错误:ViewPagerEdgeEffect fix
已经尝试并测试了ViewPager2。 使用以下代码,只需几行代码即可实现您想要的效果。
val SPACE_BETWEEN_CARD = 40
account_details_viewpager.setClipToPadding(false)
account_details_viewpager.setClipChildren(false)
account_details_viewpager.setOffscreenPageLimit(3)
account_details_viewpager.getChildAt(0).setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);
val compositePageTransformer = CompositePageTransformer()
compositePageTransformer.addTransformer(MarginPageTransformer(SPACE_BETWEEN_CARD))
compositePageTransformer.addTransformer(ViewPager2.PageTransformer() {
page: View, position: Float ->
var r :Float = 1f-Math.abs(position)
page.setScaleY(0.85f + r * 0.15f)
})
account_details_viewpager.setPageTransformer(compositePageTransformer)
这里的 "account_details_viewpager" 是 ViewPager2 的视图
override fun getPageWidth(position: Int): Float {
return 0.7f
}
在适配器类文件中添加此代码,这对我有用
根据Jiju的回答,如果您想为VIEWPAGER 2设置页面间距,请使用以下代码:
viewpager.setPageTransformer(new MarginPageTransformer(14));
在经过大量搜索后,我找到了两种可行的方法来使用ViewPager2。
1.
val pageMargin= 90;
val pageOffset = 3;
val transformer = CompositePageTransformer()
transformer.addTransformer { page, position ->
val ratio = position * -abs(2 * pageOffset + pageMargin)
val scaleFactor =
0.7f.coerceAtLeast(1 - abs(position - 0.14f))
page.translationX = ratio
page.scaleY = scaleFactor
}
binding.viewPager.setPageTransformer(transformer)
val pageMargin= 70;
val pageOffset = 3;
binding.viewPager.setPageTransformer { page, position ->
val myOffset = (position * -(2 * pageOffset + pageMargin)).toFloat()
if (position < -1) {
page.translationX = -myOffset
} else if (position <= 1) {
val scaleFactor =
0.7f.coerceAtLeast(1 - abs(position - 0.14285715f))
page.translationX = myOffset
page.scaleY = scaleFactor
page.alpha = scaleFactor
} else {
page.alpha = 0F
page.translationX = myOffset
}
}
package com.rmn.viewpager;
import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
/**
* The <code>PagerAdapter</code> serves the fragments when paging.
* @author mwho
*/
public class PagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
/**
* @param fm
* @param fragments
*/
public PagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
/* (non-Javadoc)
* @see android.support.v4.app.FragmentPagerAdapter#getItem(int)
*/
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
/* (non-Javadoc)
* @see android.support.v4.view.PagerAdapter#getCount()
*/
@Override
public int getCount() {
return this.fragments.size();
}
}
package com.manishkpr.viewpager;
import android.content.Context;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
public class ViewPagerAdapter extends FragmentPagerAdapter {
private Context _context;
public ViewPagerAdapter(Context context, FragmentManager fm) {
super(fm);
_context=context;
}
@Override
public Fragment getItem(int position) {
Fragment f = new Fragment();
switch(position){
case 0:
f=LayoutOne.newInstance(_context);
break;
case 1:
f=LayoutTwo.newInstance(_context);
break;
}
return f;
}
@Override
public int getCount() {
return 2;
}
}
setPageMargin(-100)
能正常工作吗? - MacarseViewPager2
实现,请查看此答案 https://dev59.com/olMH5IYBdhLWcg3w1TuK#58056129 - AskNilesh