Android学习笔记(十五)——侧滑容器(ViewPager)

【第一部分】历史文章:
Android学习笔记(一)——创建第一个Android项目
Android学习笔记(二)android studio基本控件及布局(实现图片查看器)
Android学习笔记(三)android studio中CheckBox自定义样式(更换复选框左侧的勾选图像)
Android学习笔记(四)Android 中Activity页面的跳转及传值
Android学习笔记(五)——Toast提示、Dialog对话框、Menu菜单
Android学习笔记(六)——自定义ListView布局+AsyncTask异步任务
Android学习笔记(七)——数据存储(共享参数SharedPreferences)
Android学习笔记(八)——数据存储(SD卡文件操作)
Android学习笔记(九)——网络技术
Android学习笔记(十)——实现新闻列表案例
Android学习笔记(十一)——一些高级控件的使用
Android学习笔记(十二)——数据存储(SQLite数据库)
Android学习笔记(十三)——数据存储(LitePal操作数据库)
Android学习笔记(十四)——内容提供器
【第二部分】主要问题解决:
Android Studio(存)读取不了SD卡上的文件——【已解决】


案例来源:2020-5-14 Android课堂案例

Viewpager即视图翻页工具,提供了多页面切换的效果。Viewpager使用起来就是我们通过创建adapter给它填充多个view,左右滑动时,切换不同的view

ViewPager使用步骤:

  • 在布局文件中定义ViewPager组件(android.support.v4.view.ViewPager节点)。
  • 在Activity中设置ViewPager中放置的view内容。
  • 给ViewPager对象设置适配器(PagerAdapter)。

ViewPager的适配器是PagerAdapter,它是基类。提供适配器来填充ViewPager的内部。一般做法都是继承PagerAdapter,自定义一个MyAdapter

也可以使用一个更具体的实现,如FragmentPagerAdapterFragmentStatePagerAdapter。谷歌官方推荐ViewPager和Fragment一起使用。当然在3.0以下版本中,没有必要这么做。

下面是一个具体的案例来演示具体的使用:
1、创建布局文件activity_main.xml

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="cn.edu.hznu.ex7_0.MainActivity">
    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/viewPager"></android.support.v4.view.ViewPager>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:id="@+id/dotsLayout"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="80dp">
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:adjustViewBounds="true"
            android:src="@drawable/dots"/>
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:adjustViewBounds="true"
            android:src="@drawable/dots"/>
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:adjustViewBounds="true"
            android:src="@drawable/dots"/>
    </LinearLayout>
</RelativeLayout>

2、自定义选择器。

dots.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:drawable="@drawable/dot_0" />
    <item android:state_enabled="true" android:drawable="@drawable/dot_1"/>
</selector>

3、自定义适配器MyPagerAdapter,并且继承PagerAdapter
重写的方法有:

  • getCount():获取当前窗体的界面数。
  • isViewFromObject(View, Object):判断是否由对象生成界面。
  • instantiateItem(ViewGroup, int):返回对象表明了PagerAdapter适配器选择哪个对象放在当前的ViewPager中
  • destroyItem(ViewGroup, int, Object):ViewGroup中移出当前View。

MyPagerAdapter.java

package cn.edu.hznu.ex7_0.adapter;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import java.util.ArrayList;
public class MyPagerAdapter extends PagerAdapter {
    //添加属性和构造方法
    private ArrayList<View> views;
    public MyPagerAdapter(ArrayList<View> views) {
        this.views = views;
    }

    public int getCount(){
        return  views.size();
    }
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==object;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        container.addView(views.get(position));
        return views.get(position);
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView(views.get(position));

    }
}

4、编写MainActivity.java

package cn.edu.hznu.ex7_0;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import java.util.ArrayList;
import cn.edu.hznu.ex7_0.adapter.MyPagerAdapter;
public class MainActivity extends AppCompatActivity {
    private ViewPager viewPager;
    private ArrayList<View> views=new ArrayList<>();
    private MyPagerAdapter adapter;
    private LinearLayout dotsLayout;
    private int[] slideID=new int[]{R.drawable.slide1,R.drawable.slide2,R.drawable.slide3};
    private ImageView[] dots=new ImageView[3];
    private int curPage=0;
    private SharedPreferences spf;
    private SharedPreferences.Editor editor;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        spf= PreferenceManager.getDefaultSharedPreferences(this);
        editor=spf.edit();
        boolean flag=spf.getBoolean("flag",false);
        if(flag==false){
            editor.putBoolean("flag",true);
            editor.commit();
        }else{
            Intent intent=new Intent(MainActivity.this,Main2Activity.class);
            startActivity(intent);
        }
        viewPager=(ViewPager)findViewById(R.id.viewPager);
        dotsLayout=(LinearLayout) findViewById(R.id.dotsLayout);
        initViews();
        adapter=new MyPagerAdapter(views);
        viewPager.setAdapter(adapter);
        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }sh
            @Override
            public void onPageSelected(int position) {
                dots[position].setEnabled(false);
                dots[curPage].setEnabled(true);
                curPage=position;
            }
            @Override
            public void onPageScrollStateChanged(int state) {
            }
        });
    }
    private void initViews() {
        for (int i=0;i<slideID.length;i++){
            ImageView image=new ImageView(this);
            image.setImageResource(slideID[i]);
            views.add(image);
        }
        for(int i=0;i<dots.length;i++){
            dots[i]= (ImageView) dotsLayout.getChildAt(i);
            dots[i].setEnabled(true);
            dots[i].setTag(i);
            dots[i].setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int position= (int) v.getTag();
                    viewPager.setCurrentItem(position);
                    //curPage=position;
                }
            });
        }
        dots[curPage].setEnabled(false);
        views.get(2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);
            }
        });
    }
}

5、效果展示。
在这里插入图片描述

功能说明:

  • 当我们滑动到最后一张图像时,点击图像跳转到第二个活动中。
  • 当首次启动项目时,显示该活动,否则,则会直接跳转到第二个活动中。(SharedPreferences实现)
    private SharedPreferences   spf=    PreferenceManager.getDefaultSharedPreferences(this);
       private SharedPreferences.Editor    editor=spf.edit();
        boolean flag=spf.getBoolean("flag",false);
        if(flag==false){
            editor.putBoolean("flag",true);
            editor.commit();
        }else{
            Intent intent=new Intent(MainActivity.this,Main2Activity.class);
            startActivity(intent);
        }

若文章中有错误的地方欢迎大家反馈或者留言,十分感谢!!!

猜你喜欢

转载自blog.csdn.net/weixin_43759352/article/details/106181793
今日推荐