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);
        }

若文章中有錯誤的地方歡迎大家反饋或者留言,十分感謝!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章