Android ViewPager + Fragment实现滑动页面
效果:
PagerData类:
1 package com.cloud.viewpagerdemo; 2 3 import java.io.Serializable; 4 5 class PagerData implements Serializable { 6 7 private int mImageResId; 8 private String mContent; 9 10 PagerData(int imageResId, String content) { 11 mImageResId = imageResId; 12 mContent = content; 13 } 14 15 public int getImageResId() { 16 return mImageResId; 17 } 18 19 public void setImageResId(int imageResId) { 20 mImageResId = imageResId; 21 } 22 23 public String getContent() { 24 return mContent; 25 } 26 27 public void setContent(String content) { 28 mContent = content; 29 } 30 }
PagerFragment类:
1 package com.cloud.viewpagerdemo; 2 3 import android.graphics.Outline; 4 import android.os.Bundle; 5 import android.support.annotation.NonNull; 6 import android.support.annotation.Nullable; 7 import android.support.v4.app.Fragment; 8 import android.view.LayoutInflater; 9 import android.view.View; 10 import android.view.ViewGroup; 11 import android.view.ViewOutlineProvider; 12 import android.widget.ImageView; 13 import android.widget.TextView; 14 15 public class PagerFragment extends Fragment { 16 17 private static final String ARG_DATA = "data"; 18 19 private PagerData mData; 20 21 private ImageView mImageView; 22 private TextView mContent; 23 24 /** 25 * 通过静态方法获取Fragment实例,向Fragment传参数 26 * @param data 数据 27 * @return Fragment 28 */ 29 public static PagerFragment newInstance(PagerData data) { 30 PagerFragment fragment = new PagerFragment(); 31 32 //使用FragmentArguments传递参数 33 Bundle args = new Bundle(); 34 args.putSerializable(ARG_DATA, data); 35 fragment.setArguments(args); 36 return fragment; 37 } 38 39 @Override 40 public void onCreate(@Nullable Bundle savedInstanceState) { 41 super.onCreate(savedInstanceState); 42 mData = (PagerData) getArguments().getSerializable(ARG_DATA); 43 } 44 45 @Nullable 46 @Override 47 public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, 48 @Nullable Bundle savedInstanceState) { 49 View view = inflater.inflate(R.layout.fragment_pager, container, false); 50 51 //绑定控件 52 mImageView = view.findViewById(R.id.image_view); 53 mContent = view.findViewById(R.id.text_content); 54 55 //ImageView设置圆角 56 ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() { 57 @Override 58 public void getOutline(View view, Outline outline) { 59 outline.setRoundRect(0, 0, mImageView.getWidth(), mImageView.getHeight(), 16); 60 } 61 }; 62 63 mImageView.setOutlineProvider(viewOutlineProvider); 64 mImageView.setClipToOutline(true); 65 mImageView.setImageResource(mData.getImageResId()); 66 mContent.setText(mData.getContent()); 67 68 return view; 69 } 70 }
PagerActivity:
1 package com.cloud.viewpagerdemo; 2 3 import android.support.v4.app.Fragment; 4 import android.support.v4.app.FragmentManager; 5 import android.support.v4.app.FragmentStatePagerAdapter; 6 import android.support.v4.view.ViewPager; 7 import android.support.v7.app.AppCompatActivity; 8 import android.os.Bundle; 9 import android.widget.TextView; 10 11 import java.util.ArrayList; 12 import java.util.List; 13 14 public class PagerActivity extends AppCompatActivity { 15 16 private List<PagerData> mPagerData = new ArrayList<>(); 17 18 private ViewPager mViewPager; 19 private TextView mTextPage; 20 21 private String page = "1 / 3"; 22 23 @Override 24 protected void onCreate(Bundle savedInstanceState) { 25 super.onCreate(savedInstanceState); 26 setContentView(R.layout.activity_pager); 27 28 initData(); 29 30 FragmentManager fragmentManager = getSupportFragmentManager(); 31 32 mViewPager = findViewById(R.id.view_pager); 33 mTextPage = findViewById(R.id.text_page); 34 //设置ViewPager适配器 35 mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) { 36 @Override 37 public Fragment getItem(int position) { 38 return PagerFragment.newInstance(mPagerData.get(position)); 39 } 40 41 @Override 42 public int getCount() { 43 return mPagerData.size(); 44 } 45 }); 46 47 //监听页面改变 48 mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 49 @Override 50 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 51 52 } 53 54 @Override 55 public void onPageSelected(int position) { 56 //页面选中 57 page = String.valueOf(position + 1) + " / " + String.valueOf(mPagerData.size()); 58 mTextPage.setText(page); 59 } 60 61 @Override 62 public void onPageScrollStateChanged(int state) { 63 64 } 65 }); 66 //设置缓存页数 67 mViewPager.setOffscreenPageLimit(3); 68 //设置默认页 69 mViewPager.setCurrentItem(0); 70 71 mTextPage.setText(page); 72 } 73 74 private void initData() { 75 //添加三项数据 76 mPagerData.add(new PagerData(R.drawable.img_0, "Photo by Adam Krowitz")); 77 mPagerData.add(new PagerData(R.drawable.img_1, "Photo by Samuel Ferrara")); 78 mPagerData.add(new PagerData(R.drawable.img_2, "Photo by Earth")); 79 } 80 }
fragment_pager:
1 <?xml version="1.0" encoding="utf-8"?> 2 <android.support.constraint.ConstraintLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent"> 8 9 <LinearLayout 10 android:layout_width="match_parent" 11 android:layout_height="match_parent" 12 android:layout_marginBottom="32dp" 13 android:layout_marginEnd="16dp" 14 android:layout_marginStart="16dp" 15 android:layout_marginTop="16dp" 16 android:background="@drawable/pager_background" 17 android:elevation="4dp" 18 android:orientation="vertical" 19 app:layout_constraintBottom_toBottomOf="parent" 20 app:layout_constraintEnd_toEndOf="parent" 21 app:layout_constraintStart_toStartOf="parent" 22 app:layout_constraintTop_toTopOf="parent"> 23 24 <ImageView 25 android:id="@+id/image_view" 26 android:layout_width="match_parent" 27 android:layout_height="0dp" 28 android:layout_margin="8dp" 29 android:layout_weight="1" 30 android:contentDescription="@null" 31 android:scaleType="centerCrop" /> 32 33 <TextView 34 android:id="@+id/text_content" 35 android:layout_width="match_parent" 36 android:layout_height="125dp" 37 android:gravity="center" 38 android:padding="8dp" 39 android:textSize="18sp" 40 android:textColor="#000000" 41 tools:text="Content" /> 42 43 </LinearLayout> 44 45 </android.support.constraint.ConstraintLayout>
activity_pager:
1 <?xml version="1.0" encoding="utf-8"?> 2 <android.support.constraint.ConstraintLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:app="http://schemas.android.com/apk/res-auto" 5 xmlns:tools="http://schemas.android.com/tools" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 tools:context=".PagerActivity"> 9 10 <android.support.v7.widget.Toolbar 11 android:id="@+id/toolbar" 12 android:layout_width="match_parent" 13 android:layout_height="48dp" 14 android:background="@color/colorPrimary" 15 android:elevation="4dp" 16 app:layout_constraintEnd_toEndOf="parent" 17 app:layout_constraintStart_toStartOf="parent" 18 app:layout_constraintTop_toTopOf="parent"> 19 20 <TextView 21 android:layout_width="wrap_content" 22 android:layout_height="wrap_content" 23 android:layout_gravity="center" 24 android:textSize="18sp" 25 android:textColor="#FFFFFF" 26 android:text="@string/app_name" /> 27 28 </android.support.v7.widget.Toolbar> 29 30 <android.support.v4.view.ViewPager 31 android:id="@+id/view_pager" 32 android:layout_width="0dp" 33 android:layout_height="0dp" 34 app:layout_constraintBottom_toBottomOf="parent" 35 app:layout_constraintEnd_toEndOf="parent" 36 app:layout_constraintStart_toStartOf="parent" 37 app:layout_constraintTop_toBottomOf="@+id/toolbar"> 38 39 </android.support.v4.view.ViewPager> 40 41 <TextView 42 android:id="@+id/text_page" 43 android:layout_width="wrap_content" 44 android:layout_height="wrap_content" 45 android:layout_marginBottom="4dp" 46 app:layout_constraintBottom_toBottomOf="parent" 47 app:layout_constraintEnd_toEndOf="parent" 48 app:layout_constraintStart_toStartOf="@+id/toolbar" 49 tools:text="page" /> 50 51 </android.support.constraint.ConstraintLayout>
转载于:https://www.cnblogs.com/cloudfloating/p/9147143.html
Android ViewPager + Fragment实现滑动页面相关推荐
- android fragment界面滑动切换效果,Android App中使用ViewPager+Fragment实现滑动切换效果...
在android应用中,多屏滑动是一种很常见的风格,没有采用viewpager的代码实现会很长,如果采用ViewPager,代码就会短很多,但是使用ViewPager也有弊端:需要导入android- ...
- Android viewpager+fragment实现无限滚动,左右有前/后一页的部分,并fragment显示的内容是activity传过去的数据
背景:最近在做app的时候碰到一个这样的需求.1,将从网络上获取的json数组数据显示出来,每页显示一个数据源,并且可以左右翻页查看:2,中间显示一个完整页,两边分别还有上下一页的一点,:3,可无限循 ...
- android viewpager 嵌套fragment,Android ViewPager+Fragment多层嵌套(使用问题处理)
之前写了Android ViewPager+Fragment(使用问题处理),封装了一个BaseFragment,对于简单使用ViewPager+Fragment而言,是没有问题的. 不过,ViewP ...
- android viewpager fragment传值,Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题...
前言 之前在做一个Viewpager上面加载多个Fragment时总会实例化已经创建好的Fragmnet对象类似 viewPager.setAdapter(new FragmentPagerAdapt ...
- android viewpager动态加载页面,Android viewpager中动态添加view并实现伪无限循环的方法...
本文实例讲述了Android viewpager中动态添加view并实现伪无限循环的方法.分享给大家供大家参考,具体如下: viewpager的使用,大家都熟悉,它可以实现页面之间左右滑动的切换,这里 ...
- Android ViewPager + Fragment的布局
ViewPager And Fragment 1.之前有篇博客是讲ViewPager的用法的:http://www.cnblogs.com/liangstudyhome/p/3773156.html ...
- Android使用Fragment打造万能页面切换框架
首先我们来回忆一下传统用Activity进行的页面切换,activity之间切换,首先需要新建intent对象,给该对象设置一些必须的参数,然后调用startActivity方法进行页面跳转.如果需要 ...
- Android使用Fragment打造万能页面切换框架(一)
首先我们来回忆一下传统用Activity进行的页面切换,activity之间切换,首先需要新建intent对象,给该对象设置一些必须的参数,然后调用startActivity方法进行页面跳转.如果需要 ...
- Android开发之ViewPager结合Fragment实现滑动页面的效果(源代码分享)
前段日子的博客有介绍过关于ViewPager的使用,发现大家对那篇博客都情有独钟,今天我们就在来看一下ViewPager在Fragment中的使用吧,因为ViewPager是在补丁包中添加的低版本的包 ...
最新文章
- internet 协议入门
- Balanced Binary Tree
- 请确定指定的驱动器中是否有盘_百格拉伺服驱动器维修常见故障现象及处理方法...
- 接口——Serializable
- 用画小狗的方法来解释Java中的值传递
- SpringBoot启动报错java.nio.charset.MalformedInputException: Input length = 2解决方案
- 批量生成6位数字_太准了,你是Excel高手or小白看这6个操作就知道了
- tm是什么域名_天猫入驻条件门槛是什么意思?企业入驻天猫详细解析
- Linux命令行下”!”的用法
- 世人都晓AI好 AI芯片知多少?
- no module named ‘cv2’解决办法
- Git项目下载部分文件或文件夹
- 【2.Delphi语法基础】7.程序异常处理
- c语言中按位取反 程序,C语言问题,if条件里面按位取反
- FIR与IIR滤波器
- 拼多多商家无货源,如何批量铺货?
- python 谷歌翻译
- 鸿蒙系统摩尔纹怎么去,PS摩尔纹如何消除?摩尔纹消除方法图文分享
- 跟着小马哥学系列之 Spring AOP(Spring 事务(源码分析)上)
- 图书管理系统需求规格说明文档目录_一个已经超越普通设计素材管理范畴的文档管理软件—Eagle...
热门文章
- golangsha1解码_如何阅读Golang的源码?
- c语言双精度型输出小数位数_4.1 C语言数据的输出
- 神经网络测试集loss不变_神经网络训练过程中不收敛或者训练失败的原因
- 教程:Visual Studio 连接 MySQL 数据库(包含常见错误及解决方法)
- bzoj 4568: [Scoi2016]幸运数字(树上倍增+线性基)
- HDU 5974 2016ICPC大连 D: A Simple Math Problem
- 汉诺塔问题(递归思想)(堆栈学习)
- shell的简单应用
- ArrayList使用
- Struts2之类型转换器