Android ViewPager1

常用方法

1)ViewPager

setAdapter

设置适配器

public void setAdapter(@Nullable PagerAdapter adapter) { }
setCurrentItem

设置当前展示的哪个 item

addOnPageChangeListener

添加 page 变化的监听器

2)PagerAdapter

getCount

返回 view 的个数

destroyItem

移除 view

instantiateItem

添加 view 并返回

isViewFromObject

判断是否同一个 view

getPageTitle

可以在这里设置标题

3)FragmentPagerAdapter

getItem

返回指定 position 的 fragment

getCount

返回 fragment 的个数

getPageTitle

可以在这里设置 title

ViewPager基础使用

1)ViewPager滑动的布局文件

mytest1\src\main\res\layout\layout1.xml

我创建了3个,都是类似的,不重复贴代码了

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="页面1"
        android:textSize="50sp"
        android:layout_centerInParent="true"
        />
</RelativeLayout>

2)activity_main.xml

mytest1\src\main\res\layout\activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</LinearLayout>

3)适配器 pagerAdapter

mytest1\src\main\java\com\example\mytest1\MyPagerAdapter.java

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import androidx.viewpager.widget.PagerAdapter;
import java.util.List;

/***
 * 适配器
 */
public class MyPagerAdapter extends PagerAdapter {
    private List<View> mViewList;
    private Context mContext;

    public MyPagerAdapter(Context context, List<View> mViewList) {
        this.mContext = context;
        this.mViewList = mViewList;
    }

    // 返回 View 的个数
    @Override
    public int getCount() {
        return mViewList.size();
    }

    // 移除 view
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
//        super.destroyItem(container, position, object);
        container.removeView(mViewList.get(position));
    }

    // 添加 view 并返回
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
//        return super.instantiateItem(container, position);
        container.addView(mViewList.get(position));
        return mViewList.get(position);
    }

    // 判断是否同一个 view
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }
}

4)MainActivity

import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        LayoutInflater inflater = getLayoutInflater();
        View view1 = inflater.inflate(R.layout.layout1, null);
        View view2 = inflater.inflate(R.layout.layout2, null);
        View view3 = inflater.inflate(R.layout.layout3, null);

        List<View> mViewList = new ArrayList<>();
        mViewList.add(view1);
        mViewList.add(view2);
        mViewList.add(view3);

        ViewPager viewPager = findViewById(R.id.view_pager);
        viewPager.setAdapter(new MyPagerAdapter(getApplicationContext(), mViewList));
    }
}

5)效果

在这里插入图片描述

6)示例代码

示例代码:viewPager

ViewPager - PagerTabStrip、PagerTitleStrip

PagerTabStrip 相对 PagerTitleStrip 多了下划线的效果;
在ViewPager的布局文件中,可以将 PagerTabStrip 替换为 PagerTitleStrip 。

1)ViewPager滑动的布局文件

mytest2\src\main\res\layout\layout1.xml

我创建了3个,都是类似的,不重复贴代码了

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="页面1"
        android:textSize="50sp"
        android:layout_centerInParent="true"
        />
</RelativeLayout>

2)activity_main.xml

mytest2\src\main\res\layout\activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <androidx.viewpager.widget.PagerTabStrip
            android:id="@+id/pager_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="30dp"
            android:background="@color/teal_200"
            />
    </androidx.viewpager.widget.ViewPager>
</LinearLayout>

3)适配器 pagerAdapter

mytest2\src\main\java\com\example\mytest2\MyPagerAdapter.java

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import androidx.viewpager.widget.PagerAdapter;
import java.util.List;

/***
 * 适配器
 */
public class MyPagerAdapter extends PagerAdapter {
    private List<View> mViewList;
    private List<String> mViewTitle;
    private Context mContext;

    public MyPagerAdapter(Context context, List<View> mViewList, List<String> mViewTitle) {
        this.mContext = context;
        this.mViewList = mViewList;
        this.mViewTitle = mViewTitle;
    }

    // 返回 View 的个数
    @Override
    public int getCount() {
        return mViewList.size();
    }

    // 移除 view
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
//        super.destroyItem(container, position, object);
        container.removeView(mViewList.get(position));
    }

    // 添加 view 并返回
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
//        return super.instantiateItem(container, position);
        container.addView(mViewList.get(position));
        return mViewList.get(position);
    }

    // 判断是否同一个 view
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    // 标题
    @Override
    public CharSequence getPageTitle(int position) {
//        return super.getPageTitle(position);
        return mViewTitle.get(position);
    }
}

4)MainActivity

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        LayoutInflater inflater = getLayoutInflater();
        View view1 = inflater.inflate(R.layout.layout1, null);
        View view2 = inflater.inflate(R.layout.layout2, null);
        View view3 = inflater.inflate(R.layout.layout3, null);

        List<View> mViewList = new ArrayList<>();
        mViewList.add(view1);
        mViewList.add(view2);
        mViewList.add(view3);

        List<String> mViewTitle = new ArrayList<>();
        mViewTitle.add("page1");
        mViewTitle.add("page2");
        mViewTitle.add("page3");

        ViewPager viewPager = findViewById(R.id.view_pager);
        viewPager.setAdapter(new MyPagerAdapter(getApplicationContext(), mViewList, mViewTitle));
    }
}

5)效果

在这里插入图片描述

6)示例代码

示例代码:viewPager

ViewPager - TabLayout

1)ViewPager滑动的布局文件

mytest3\src\main\res\layout\layout1.xml

我创建了3个,都是类似的,不重复贴代码了

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="页面1"
        android:textSize="50sp"
        android:layout_centerInParent="true"
        />
</RelativeLayout>

2)activity_main.xml

mytest3\src\main\res\layout\activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </androidx.viewpager.widget.ViewPager>

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#F3F3FA"
        android:layout_alignParentBottom="true"
        />
</RelativeLayout>

3)适配器 pagerAdapter

mytest3\src\main\java\com\example\mytest3\MyPagerAdapter.java

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import androidx.viewpager.widget.PagerAdapter;
import java.util.List;

/***
 * 适配器
 */
public class MyPagerAdapter extends PagerAdapter {
    private List<View> mViewList;
    private List<String> mViewTitle;
    private Context mContext;

    public MyPagerAdapter(Context context, List<View> mViewList, List<String> mViewTitle) {
        this.mContext = context;
        this.mViewList = mViewList;
        this.mViewTitle = mViewTitle;
    }

    // 返回 View 的个数
    @Override
    public int getCount() {
        return mViewList.size();
    }

    // 移除 view
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
//        super.destroyItem(container, position, object);
        container.removeView(mViewList.get(position));
    }

    // 添加 view 并返回
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
//        return super.instantiateItem(container, position);
        container.addView(mViewList.get(position));
        return mViewList.get(position);
    }

    // 判断是否同一个 view
    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    // 标题
    @Override
    public CharSequence getPageTitle(int position) {
//        return super.getPageTitle(position);
        return mViewTitle.get(position);
    }
}

4)MainActivity

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        LayoutInflater inflater = getLayoutInflater();
        View view1 = inflater.inflate(R.layout.layout1, null);
        View view2 = inflater.inflate(R.layout.layout2, null);
        View view3 = inflater.inflate(R.layout.layout3, null);

        List<View> mViewList = new ArrayList<>();
        mViewList.add(view1);
        mViewList.add(view2);
        mViewList.add(view3);

        List<String> mViewTitle = new ArrayList<>();
        mViewTitle.add("page1");
        mViewTitle.add("page2");
        mViewTitle.add("page3");

        ViewPager viewPager = findViewById(R.id.view_pager);
        MyPagerAdapter adapter = new MyPagerAdapter(getApplicationContext(), mViewList, mViewTitle);
        viewPager.setAdapter(adapter);

        TabLayout tabLayout = findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab());
        tabLayout.addTab(tabLayout.newTab());
        tabLayout.addTab(tabLayout.newTab());
        tabLayout.setupWithViewPager(viewPager);

        // 在addTab的时候,设置Text,是不会生效的,代码中有removeAllTabs()
        // 在adapter中的getPageTitle进行设置也是可以的
        // 在这里设置,优先生效
//        tabLayout.getTabAt(0).setText("tab1");
//        tabLayout.getTabAt(1).setText("tab2");
//        tabLayout.getTabAt(2).setText("tab3");
    }
}

5)效果

在这里插入图片描述

6)示例代码

示例代码:viewPager

ViewPager - TabLayout - Fragment

1)ViewPager滑动的布局文件

mytest4\src\main\res\layout\layout1.xml

我创建了3个,都是类似的,不重复贴代码了

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="页面1"
        android:textSize="50sp"
        android:layout_centerInParent="true"
        />
</RelativeLayout>

2)activity_main.xml

mytest4\src\main\res\layout\activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </androidx.viewpager.widget.ViewPager>

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#F3F3FA"
        android:layout_alignParentBottom="true"
        />
</RelativeLayout>

3)适配器 FragmentPagerAdapter

mytest4\src\main\java\com\example\mytest4\MyFragmentPagerAdapter.java

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.List;

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragmentList;
    private List<String> titleList;

    public MyFragmentPagerAdapter(FragmentManager fm,
                                  List<Fragment> list,
                                  List<String> titleList) {
        super(fm);
        this.fragmentList = list;
        this.titleList = titleList;
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
//        return super.getPageTitle(position);
        return titleList.get(position);
    }
}

4)新建Fragment类

创建3个,内容类似
mytest4\src\main\java\com\example\mytest4\MyFragment1.java

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class MyFragment1 extends Fragment {
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
//        return super.onCreateView(inflater, container, savedInstanceState);
        View view = inflater.inflate(R.layout.layout1, container, false);
        return view;
    }
}

5)MainActivity

mytest4\src\main\java\com\example\mytest4\MainActivity.java

import android.os.Bundle;
import android.view.Window;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        List<Fragment> fragmentList = new ArrayList<>();
        fragmentList.add(new MyFragment1());
        fragmentList.add(new MyFragment2());
        fragmentList.add(new MyFragment3());

        List<String> mViewTitle = new ArrayList<>();
        mViewTitle.add("page1");
        mViewTitle.add("page2");
        mViewTitle.add("page3");

        ViewPager viewPager = findViewById(R.id.view_pager);
        MyFragmentPagerAdapter fragmentPagerAdapter = new MyFragmentPagerAdapter(
                getSupportFragmentManager(), fragmentList, mViewTitle);
        viewPager.setAdapter(fragmentPagerAdapter);
        viewPager.setCurrentItem(0);

        TabLayout tabLayout = findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab());
        tabLayout.addTab(tabLayout.newTab());
        tabLayout.addTab(tabLayout.newTab());
        tabLayout.setupWithViewPager(viewPager);

        // 在addTab的时候,设置Text,是不会生效的,代码中有removeAllTabs()
        // 在adapter中的getPageTitle进行设置也是可以的
        // 在这里设置,优先生效
//        tabLayout.getTabAt(0).setText("tab1");
//        tabLayout.getTabAt(1).setText("tab2");
//        tabLayout.getTabAt(2).setText("tab3");
    }
}

6)效果

在这里插入图片描述

7)示例代码

示例代码:viewPager

ViewPager - BottomNavigationView - Fragment

1)ViewPager滑动的布局文件

mytest5\src\main\res\layout\layout1.xml

我创建了3个,都是类似的,不重复贴代码了

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="页面1"
        android:textSize="50sp"
        android:layout_centerInParent="true"
        />
</RelativeLayout>

2)menu/bottomnavigationview.xml

mytest5\src\main\res\menu\bottomnavigationview.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/fragment1"
        android:icon="@mipmap/msg"
        android:title="消息"/>
    <item
        android:id="@+id/fragment2"
        android:icon="@mipmap/addressbook"
        android:title="通讯录"/>
    <item
        android:id="@+id/fragment3"
        android:icon="@mipmap/mine"
        android:title="我"/>
</menu>

3)activity_main.xml

mytest5\src\main\res\layout\activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </androidx.viewpager.widget.ViewPager>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_navigation_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        app:menu="@menu/bottomnavigationview"
        />
</RelativeLayout>

4)适配器 FragmentPagerAdapter

mytest5\src\main\java\com\example\mytest5\MyFragmentPagerAdapter.java

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.List;

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragmentList;

    public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> list) {
        super(fm);
        this.fragmentList = list;
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }
}

5)新建Fragment类

创建3个,内容类似
mytest5\src\main\java\com\example\mytest5\MyFragment1.java

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class MyFragment1 extends Fragment {
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
//        return super.onCreateView(inflater, container, savedInstanceState);
        View view = inflater.inflate(R.layout.layout1, container, false);
        return view;
    }
}

6)MainActivity

mytest5\src\main\java\com\example\mytest5\MainActivity.java

import android.os.Bundle;
import android.view.MenuItem;
import android.view.Window;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private BottomNavigationView bottomNavigationView;
    private MyFragmentPagerAdapter fragmentPagerAdapter;
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        List<Fragment> fragmentList = new ArrayList<>();
        fragmentList.add(new MyFragment1());
        fragmentList.add(new MyFragment2());
        fragmentList.add(new MyFragment3());

        fragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentList);

        viewPager = findViewById(R.id.view_pager);
        viewPager.setAdapter(fragmentPagerAdapter);
        viewPager.setCurrentItem(0);
        viewPager.addOnPageChangeListener(onPageChangeListener);

        bottomNavigationView = findViewById(R.id.bottom_navigation_view);
        bottomNavigationView.setOnNavigationItemSelectedListener(onNavigationItemSelectedListener);
    }

    private ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }

        @Override
        public void onPageSelected(int position) {
            int itemID = R.id.fragment1;
            switch (position) {
                case 0:
                    itemID = R.id.fragment1;
                    break;
                case 1:
                    itemID = R.id.fragment2;
                    break;
                case 2:
                    itemID = R.id.fragment3;
                    break;
            }
            bottomNavigationView.setSelectedItemId(itemID);
        }

        @Override
        public void onPageScrollStateChanged(int state) { }
    };

    private BottomNavigationView.OnNavigationItemSelectedListener onNavigationItemSelectedListener =
            new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.fragment1:
                    viewPager.setCurrentItem(0, true);
                    return true;
                case R.id.fragment2:
                    viewPager.setCurrentItem(1, true);
                    return true;
                case R.id.fragment3:
                    viewPager.setCurrentItem(2, true);
                    return true;
            }
            return false;
        }
    };

}

7)效果

在这里插入图片描述

8)示例代码

示例代码:viewPager

ViewPager - 旋转效果

1)ViewPager滑动的布局文件

mytest6\src\main\res\layout\layout1.xml

我创建了3个,都是类似的,不重复贴代码了

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@mipmap/msg"/>
</RelativeLayout>

2)menu/bottomnavigationview.xml

mytest6\src\main\res\menu\bottomnavigationview.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/fragment1"
        android:icon="@mipmap/msg"
        android:title="消息"/>
    <item
        android:id="@+id/fragment2"
        android:icon="@mipmap/addressbook"
        android:title="通讯录"/>
    <item
        android:id="@+id/fragment3"
        android:icon="@mipmap/mine"
        android:title="我"/>
</menu>

3)activity_main.xml

mytest6\src\main\res\layout\activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </androidx.viewpager.widget.ViewPager>

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_navigation_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        app:menu="@menu/bottomnavigationview"
        />
</RelativeLayout>

4)适配器 FragmentPagerAdapter

mytest6\src\main\java\com\example\mytest6\MyFragmentPagerAdapter.java

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.List;

public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
    private List<Fragment> fragmentList;

    public MyFragmentPagerAdapter(FragmentManager fm, List<Fragment> list) {
        super(fm);
        this.fragmentList = list;
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }
}

5)自定义PagerTransformer

mytest6\src\main\java\com\example\mytest6\MyPagerTransformer.java

import android.view.View;
import androidx.annotation.NonNull;
import androidx.viewpager.widget.ViewPager;

public class MyPagerTransformer implements ViewPager.PageTransformer {
    @Override
    public void transformPage(@NonNull View page, float position) {
        float max_rotation = 20.0f;
        if (position < -1) {
            rotate(page, -max_rotation);
        } else if (position <= 1) {
            rotate(page, max_rotation * position);
        } else {
            rotate(page, max_rotation);
        }
    }

    private void rotate(View view, float r) {
        view.setPivotX(view.getWidth() * 0.2f);
        view.setPivotY(view.getHeight());
        view.setRotation(r);
    }
}

6)新建Fragment类

创建3个,内容类似
mytest6\src\main\java\com\example\mytest6\MyFragment1.java

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class MyFragment1 extends Fragment {
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
//        return super.onCreateView(inflater, container, savedInstanceState);
        View view = inflater.inflate(R.layout.layout1, container, false);
        return view;
    }
}

7)MainActivity

mytest6\src\main\java\com\example\mytest6\MainActivity.java

import android.os.Bundle;
import android.view.MenuItem;
import android.view.Window;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private BottomNavigationView bottomNavigationView;
    private MyFragmentPagerAdapter fragmentPagerAdapter;
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        List<Fragment> fragmentList = new ArrayList<>();
        fragmentList.add(new MyFragment1());
        fragmentList.add(new MyFragment2());
        fragmentList.add(new MyFragment3());

        fragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager(), fragmentList);

        viewPager = findViewById(R.id.view_pager);
        viewPager.setAdapter(fragmentPagerAdapter);
        viewPager.setCurrentItem(0);
        viewPager.addOnPageChangeListener(onPageChangeListener);
        viewPager.setPageTransformer(true, new MyPagerTransformer());

        bottomNavigationView = findViewById(R.id.bottom_navigation_view);
        bottomNavigationView.setOnNavigationItemSelectedListener(onNavigationItemSelectedListener);
    }

    private ViewPager.OnPageChangeListener onPageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }

        @Override
        public void onPageSelected(int position) {
            int itemID = R.id.fragment1;
            switch (position) {
                case 0:
                    itemID = R.id.fragment1;
                    break;
                case 1:
                    itemID = R.id.fragment2;
                    break;
                case 2:
                    itemID = R.id.fragment3;
                    break;
            }
            bottomNavigationView.setSelectedItemId(itemID);
        }

        @Override
        public void onPageScrollStateChanged(int state) { }
    };

    private BottomNavigationView.OnNavigationItemSelectedListener onNavigationItemSelectedListener =
            new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.fragment1:
                    viewPager.setCurrentItem(0, true);
                    return true;
                case R.id.fragment2:
                    viewPager.setCurrentItem(1, true);
                    return true;
                case R.id.fragment3:
                    viewPager.setCurrentItem(2, true);
                    return true;
            }
            return false;
        }
    };
}

7)效果

在这里插入图片描述

8)示例代码

示例代码:viewPager

参考博文:

    Android控件-TabLayout使用介绍
    Android ViewPager使用方法小结

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值