博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第13天ViewPager案例1:向导页(***)
阅读量:3785 次
发布时间:2019-05-22

本文共 7157 字,大约阅读时间需要 23 分钟。

第13天ViewPager案例1:向导页(***)

ViewPager

一.ViewPager介绍

  • android.support.v4.view.ViewPager

  • 特点:

    继承于ViewGroup, 是一个容器, 添加一系列的View

    数据填充需要通过PagerAdapter(向导页)

    ViewPager 通常和Fragment一起使用FragmentPagerAdapter(底部导航栏)

二.效果

在这里插入图片描述

1.自动轮播
2.滑动小圆点跟着走
3.最后一页显示立即体验按钮
4.最后一页,右上角倒计时
5.第一次打开有向导页,当第2次打开没有向导页,直接是首页

三.思路:1个ViewPager+4个View+1个PagerAdapter

1.容器:ViewPager------>Listview

2.数据:ArrayList<View.
3.适配器:PagerAdapter-------->BaseAdapter

重写的方法:

(1)getCount():返回数据源的总数量
(2)isViewFromObject() 判断当前显示的View 和instantiateItem() 返回的页面是否一致
(3)instantiateItem() 根据下标, 创建ViewPager中显示的页面
(4)destroyItem() 根据下标, 移除ViewPager 中的页面

四.代码

(1)布局activity_main.xml:ViewPager+小圆点+开始体验+右上角倒计时

(2)Java代码:MainActivity.java

public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;//ViewPager容器 private TextView time_tv;//5秒倒计时 private Button start;//开始体验按钮 private MyPagerAdapter myPagerAdapter;//适配器 private ArrayList
list=new ArrayList<>();//数据:4张View private ArrayList
icon_list=new ArrayList<>();//小圆点图片 private int current_item=0;//默认显示页 private int time=5;//默认剩余时间 private SharedPreferences preferences;//第2次打开不走向导页 private Handler handler=new Handler(){
@Override public void handleMessage(Message msg) {
//handler:自动轮播+5秒到技术 super.handleMessage(msg); if(msg.what==101){
//自动轮播 viewPager.setCurrentItem(++current_item);//设置滚动下一页 }else if(msg.what==102){
//5秒倒计时 time_tv.setText("剩余时间"+(--time)); if(time==0){
//页面跳转 Intent intent=new Intent(MainActivity.this,Main2Activity.class); startActivity(intent); } } } }; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //设置二次打开不走向导页 preferences= getSharedPreferences("welcome", MODE_PRIVATE); boolean flag=preferences.getBoolean("isdone",false); if(flag){
//若是第二次打开直接页面跳转 Intent intent=new Intent(MainActivity.this,Main2Activity.class); startActivity(intent); } //TODO 加载视图 initview(); //TODO 加载圆点 initicon(); //TODO 加载数据 initdata(); //TODO 设置适配器 initadpter(); //TODO 设置事件监听 initListener(); //TODO 自动轮播 final Timer timer=new Timer(); timer.schedule(new TimerTask() {
@Override public void run() {
if(current_item!=list.size()-1){
//不是最后一页 handler.sendEmptyMessage(101);//发送一个空的消息 }else{
timer.cancel();//如果是最后一页,直接取消定时器 } } },0,1000); } private void initListener() {
//开始按钮点击事件 start.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,Main2Activity.class); startActivity(intent); } }); //滑动viewPager的时候小圆点跟着走 viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
//当页面滑动的时候调用 @Override public void onPageScrolled(int i, float v, int i1) {
} //当页面被选择的时候 @Override public void onPageSelected(int i) {
//1 //TODO 将所有圆点变白,当前变灰 for(int j=0;j
0){
handler.sendEmptyMessage(102); }else{
timer.cancel(); } } },0,1000); }else{
start.setVisibility(View.GONE); time_tv.setVisibility(View.GONE); } } //当页面滑动状态改变的时候 @Override public void onPageScrollStateChanged(int i) {
} }); } private void initadpter() {
myPagerAdapter=new MyPagerAdapter(list,this); viewPager.setAdapter(myPagerAdapter); } private void initview() {
viewPager=findViewById(R.id.pager); start=findViewById(R.id.start); time_tv=findViewById(R.id.time_tv); } private void initdata() {
ImageView imageView1= new ImageView(this); imageView1.setImageResource(R.drawable.tp); list.add(imageView1); ImageView imageView2= new ImageView(this); imageView2.setImageResource(R.drawable.tp_01); list.add(imageView2); ImageView imageView3= new ImageView(this); imageView3.setImageResource(R.drawable.tp_02); list.add(imageView3); ImageView imageView4= new ImageView(this); imageView4.setImageResource(R.drawable.tp_04); list.add(imageView4); ImageView imageView5= new ImageView(this); imageView5.setImageResource(R.drawable.tp_06); list.add(imageView5); } private void initicon() {
icon_list.add((ImageView) findViewById(R.id.icon1)); icon_list.add((ImageView) findViewById(R.id.icon2)); icon_list.add((ImageView) findViewById(R.id.icon3)); icon_list.add((ImageView) findViewById(R.id.icon4)); icon_list.add((ImageView) findViewById(R.id.icon5)); }}

(3)Main2Activity.java :页面跳转

public class Main2Activity extends AppCompatActivity {
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); //SP 存储 SharedPreferences.Editor welcome = getSharedPreferences("welcome", MODE_PRIVATE).edit(); welcome.putBoolean("isdone",true); welcome.commit(); }}

(4)适配器代码:

public class MyPagerAdapter extends PagerAdapter {
private ArrayList
list;//数据 private Context context; public MyPagerAdapter(ArrayList
list, Context context) {
this.list = list; this.context = context; } //TODO 返回数量 @Override public int getCount() {
return list.size(); } //TODO 判断view是否来自集合中 @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view==o; } //TODO 根据下标加载View @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) {
//向容器中添加View Log.i("aaaaa", position+"加载了: "); container.addView(list.get(position)); return list.get(position); } //TODO 根据下标移除:不是移除集合中的,而是移除Viewgroup里面的 @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
// super.destroyItem(container, position, object);//注意:该方法不要写 //从容器中移除View Log.i("aaaaa", position+"溢出了: "); container.removeView(list.get(position)); }}

源代码:

转载地址:http://swktn.baihongyu.com/

你可能感兴趣的文章
计组期末复习题(5)
查看>>
计组期末开卷资料
查看>>
计组期末复习题获取
查看>>
c++(STL中一些常用操作)
查看>>
php(环境搭建)
查看>>
php(变量)
查看>>
php(单双引号的区别)
查看>>
php(数据类型)
查看>>
php(运算符及流程控制)
查看>>
php(自定义函数与系统自带函数)
查看>>
php(从一个文件中调用另一个文件的变量)
查看>>
php(数组及相关操作)
查看>>
php(about error and time)
查看>>
利用php对数据库进行操作
查看>>
二叉树及其(前中后)序遍历
查看>>
2020.8.29 ssdh
查看>>
PyCharm使用技巧及常用快捷键
查看>>
ubuntu内存爆满卡住,一顿操作任务栏菜单栏消失再解决办法记录
查看>>
ubuntu下pycharm无法输入中文解决办法(记录)
查看>>
torch.cuda.is_available()返回False的解决办法
查看>>