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了):
在這裏插入圖片描述
在這裏插入圖片描述

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