Android开发源码之实现滑动页面
白羽 2018-06-27 来源 :网络 阅读 1342 评论 0

摘要:本文将带你了解Android开发源码之实现滑动页面,希望本文对大家学Android有所帮助


效果:

 

Android开发源码之实现滑动页面

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!

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 Fragment28      */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     @Override40     public void onCreate(@Nullable Bundle savedInstanceState) {41         super.onCreate(savedInstanceState);42         mData = (PagerData) getArguments().getSerializable(ARG_DATA);43     }44 45     @Nullable46     @Override47     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             @Override58             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 ListmPagerData = new ArrayList<>();17 18     private ViewPager mViewPager;19     private TextView mTextPage;20 21     private String page = "1 / 3";22 23     @Override24     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             @Override37             public Fragment getItem(int position) {38                 return PagerFragment.newInstance(mPagerData.get(position));39             }40 41             @Override42             public int getCount() {43                 return mPagerData.size();44             }45         });46 47         //监听页面改变48         mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {49             @Override50             public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {51 52             }53 54             @Override55             public void onPageSelected(int position) {56                 //页面选中57                 page = String.valueOf(position + 1) + " / " + String.valueOf(mPagerData.size());58                 mTextPage.setText(page);59             }60 61             @Override62             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  2  8  9     23 24         32 33         42 43     44 45 

 

activity_pager:

 

 1  2  9 10     19 20         27 28     29 30     38 39     40 41     50 51 

 


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程