Android 之 ViewPager (一)

对于经常要在一个窗口里面切换多布局的,如果只单纯的使用手势切换,多少还是有点费劲,官方给我们提供了一个组件ViewPager,可以做到很棒的切换。

实现思路:

1、先添加一个ViewPager组件;
2、创建几个XML布局;
3、使用适配器的方法将布局添加到组件中。

Activity布局:

<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">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager1"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </android.support.v4.view.ViewPager>

</LinearLayout>

left_activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@color/colorPrimary"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_gravity="center"
        android:gravity="center"
        android:text="过江千尺浪"
        android:textColor="@android:color/white"
        android:textSize="24sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

right_activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@android:color/holo_blue_dark"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_gravity="center"
        android:gravity="center"
        android:text="入竹万杆斜"
        android:textColor="@android:color/white"
        android:textSize="24sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

Java代码:

public class MainActivity extends AppCompatActivity {

    ViewPager viewPager;
    List<View> views;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        hide_actionbar();
        init();
//      找到布局
        View left_view = View.inflate(MainActivity.this,R.layout.left_activity,null);
        View right_view = View.inflate(MainActivity.this,R.layout.right_activity,null);
//      添加布局
        views.add(left_view);
        views.add(right_view);
//      添加适配器
        viewPager.setAdapter(new MyAdapter(views));

    }
//    隐藏actionbar,纯粹为了好看而已
    private void hide_actionbar(){
        ActionBar actionBar = getSupportActionBar();

        if (actionBar != null) {
            actionBar.hide();
        }
    }
//    初始化组件
    private void init(){
        viewPager = findViewById(R.id.viewpager1);
        views = new ArrayList<>();
    }
    class MyAdapter extends PagerAdapter{

        private List<View> views;
        public MyAdapter(List<View> views) {
            this.views = views;
        }

//        得到view的总数量
        @Override
        public int getCount() {
            return views.size();
        }
//      一般返回一个true就行
        @Override
        public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
            return view == object;
        }

        @NonNull
        @Override
//        添加布局组件
        public Object instantiateItem(@NonNull ViewGroup container, int position) {
            container.addView(views.get(position));
            return views.get(position);
        }
//        销毁布局组件
        @Override
        public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
            container.removeView(views.get(position));
        }
    }

}

效果图(就不录GIF了):
在这里插入图片描述
在这里插入图片描述

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