Android ViewPager在屏幕上显示下一个和前一个项目预览
我想在屏幕中的页面预览之前显示viewpager。前一页和下一页在屏幕中显示深度,并用深度动画滑动下一页 你可以看看这个图像 我怎么做Android ViewPager在屏幕上显示下一个和前一个项目预览,android,android-viewpager,pager,Android,Android Viewpager,Pager,我想在屏幕中的页面预览之前显示viewpager。前一页和下一页在屏幕中显示深度,并用深度动画滑动下一页 你可以看看这个图像 我怎么做 您可以使用PagerTransformer来查看Pager:- mViewPager.setPageTransformer(false, new ViewPager.PageTransformer() { @Override public void transformPage(View page, float position) {
您可以使用PagerTransformer来查看Pager:-
mViewPager.setPageTransformer(false, new ViewPager.PageTransformer() {
@Override
public void transformPage(View page, float position) {
// do transformation here
}
});
使用此链接可获得完整的教程:-
希望这对你有帮助:)最后,我做到了:)我修改了这个答案
您可以查看此代码
//pager settings
pager.setClipToPadding(false);
pager.setPageMargin(24);
pager.setPadding(48, 8, 48, 8);
pager.setOffscreenPageLimit(3);
pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
Log.i("", "onPageScrolled: " + position);
CampaignPagerFragment sampleFragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(position);
float scale = 1 - (positionOffset * RATIO_SCALE);
// Just a shortcut to findViewById(R.id.image).setScale(scale);
sampleFragment.scaleImage(scale);
if (position + 1 < pager.getAdapter().getCount()) {
sampleFragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(position + 1);
scale = positionOffset * RATIO_SCALE + (1 - RATIO_SCALE);
sampleFragment.scaleImage(scale);
}
}
@Override
public void onPageSelected(int position) {
Log.i("", "onPageSelected: " + position);
}
@Override
public void onPageScrollStateChanged(int state) {
Log.i("", "onPageScrollStateChanged: " + state);
if (state == ViewPager.SCROLL_STATE_IDLE) {
CampaignPagerFragment fragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(pager.getCurrentItem());
fragment.scaleImage(1);
if (pager.getCurrentItem() > 0) {
fragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(pager.getCurrentItem() - 1);
fragment.scaleImage(1 - RATIO_SCALE);
}
if (pager.getCurrentItem() + 1 < pager.getAdapter().getCount()) {
fragment = (CampaignPagerFragment) ((CampaignPagerAdapter) pager.getAdapter()).getRegisteredFragment(pager.getCurrentItem() + 1);
fragment.scaleImage(1 - RATIO_SCALE);
}
}
}
});
//寻呼机设置
pager.setCliptPadding(false);
寻呼机设置页边距(24);
寻呼机设置填充(48,8,48,8);
pager.setOffscreenPageLimit(3);
pager.setOnPageChangeListener(新的ViewPager.OnPageChangeListener(){
@凌驾
已滚动页面上的公共无效(int-position、float-positionOffset、int-positionOffsetPixels){
Log.i(“,”在页面上滚动:“+位置);
ActivityPagerFragment sampleFragment=(ActivityPagerFragment)((ActivityPageRadapter)pager.getAdapter()).getRegisteredFragment(位置);
浮动刻度=1-(位置偏移*比率\刻度);
//只是一个findViewById(R.id.image)的快捷方式;
sampleFragment.scaleImage(比例);
if(位置+10){
fragment=(ActivityPagerFragment)((ActivityPageRadapter)pager.getAdapter()).getRegisteredFragment(pager.getCurrentItem()-1);
片段.标度图像(1-比例/标度);
}
if(pager.getCurrentItem()+1
//PagerAdapter
公共类活动PageRadapter扩展了FragmentStatePagerAdapter{
SparseArray registeredFragments=新SparseArray();
公共活动页面雷达(碎片管理器fm){
超级(fm);
}
@凌驾
public int getCount(){
返回5;
}
@凌驾
公共片段getItem(int位置){
返回新的活动页面片段();
}
@凌驾
公共对象实例化项(视图组容器,int位置){
Fragment Fragment=(Fragment)super.instanceItem(容器,位置);
注册碎片。放置(位置,碎片);
返回片段;
}
@凌驾
公共项(视图组容器、int位置、对象){
注册碎片。移除(位置);
超级项目(容器、位置、对象);
}
公共片段getRegisteredFragment(int位置){
返回registeredFragments.get(位置);
}
}
例如:
你好,少了一件东西
sampleFragment.scaleImage(比例);
它是在ActivityPagerFragment中创建的一个方法,它可以缩放片段根视图
e、 gpublic void scaleImage(float-scaleX)
{
rootView.setScaleY(scaleX);
rootView.invalidate();
}
viewPager.setPageMargin(100);
viewPager.setPageTransformer(false,新建viewPager.PageTransformer()
{
@凌驾
公共页面(查看页面、浮动位置)
{
int pageWidth=viewPager.getMeasuredWidth()-
viewPager.getPaddingLeft()-viewPager.getPaddingRight();
int pageHeight=viewPager.getHeight();
int paddingLeft=viewPager.getPaddingLeft();
float transformPos=(float)(page.getLeft()-
(viewPager.getScrollX()+paddingLeft))/pageWidth;
int max=页面高度/10;
如果(转换位置<-1)
{
//[-无穷大,-1)
//这个页面在屏幕的左边。
page.setAlpha(0.5f);//使左侧透明
第页:设置刻度(0.7f);
}
否则,如果(转换位置
为此,我根据位置更改了viewpager的填充
我认为这是最简单、最干净的解决方案
float scaleFactor = 0.85f;
viewPager.setPageMargin(-35);
viewPager.setOffscreenPageLimit(2);
viewPager.setPageTransformer(false, new ViewPager.PageTransformer() {
@Override
public void transformPage(@NonNull View page, float position) {
page.setScaleY((1 - Math.abs(position) * (1 - scaleFactor)));
page.setScaleX(scaleFactor + Math.abs(position) * (1 - scaleFactor));
}
});
试一试你是否完美地解决了这个问题。我的案例低调节手机工作正常,但高度调节手机不工作。嗨,当我使用此代码时,当我在第一项上时,左项不显示。事实上,左项应该是列表中的最后一项,以使其循环。这是否可以用此代码实现?是否存在使下一个项目和预览项目模糊的方法,然后在“onPageSelected(int position)”中的“聚焦时消除模糊”您可以删除Blur@MrGwhat是RATIO_SCALE?您好,谢谢您的代码。但我有一个小问题:显示了3页,但右一个比例在刷卡后首先不起作用。当应用程序运行时,我如何设置左右两侧页面的比例。@KaveeshKanwal在我的应用程序中起作用了吗?在我的情况下,您有什么问题吗不使用片段,但使用动态视图
viewPager.setPageMargin(100);
viewPager.setPageTransformer(false, new ViewPager.PageTransformer()
{
@Override
public void transformPage(View page, float position)
{
int pageWidth = viewPager.getMeasuredWidth() -
viewPager.getPaddingLeft() - viewPager.getPaddingRight();
int pageHeight = viewPager.getHeight();
int paddingLeft = viewPager.getPaddingLeft();
float transformPos = (float) (page.getLeft() -
(viewPager.getScrollX() + paddingLeft)) / pageWidth;
int max = pageHeight / 10;
if (transformPos < -1)
{
// [-Infinity,-1)
// This page is way off-screen to the left.
page.setAlpha(0.5f);// to make left transparent
page.setScaleY(0.7f);
}
else if (transformPos <= 1)
{
// [-1,1]
page.setScaleY(1f);
}
else
{
// (1,+Infinity]
// This page is way off-screen to the right.
page.setAlpha(0.5f);// to make right transparent
page.setScaleY(0.7f);
}
}
});
carouselViewHolder.carouselViewPager.setPadding(Utils.dpToPixels(context, 12), 0, Utils.dpToPixels(context, paddingRequired - 12), 0); // initial padding for position 0
carouselViewHolder.carouselViewPager.setPageMargin(Utils.dpToPixels(context, 12)); // margin between pages
carouselViewHolder.carouselViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if (position != 0) {
if (position == playCardData.getPlayCards().size() - 1) {
carouselViewHolder.carouselViewPager.setPadding(Utils.dpToPixels(context, finalPaddingRequired - 12), 0, Utils.dpToPixels(context, 12), 0);
} else
carouselViewHolder.carouselViewPager.setPadding(Utils.dpToPixels(context, finalPaddingRequired / 2), 0, Utils.dpToPixels(context, finalPaddingRequired / 2), 0);
} else {
carouselViewHolder.carouselViewPager.setPadding(Utils.dpToPixels(context, 12), 0, Utils.dpToPixels(context, finalPaddingRequired - 12), 0);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
float scaleFactor = 0.85f;
viewPager.setPageMargin(-35);
viewPager.setOffscreenPageLimit(2);
viewPager.setPageTransformer(false, new ViewPager.PageTransformer() {
@Override
public void transformPage(@NonNull View page, float position) {
page.setScaleY((1 - Math.abs(position) * (1 - scaleFactor)));
page.setScaleX(scaleFactor + Math.abs(position) * (1 - scaleFactor));
}
});