java ViewPager && Fragment Study && Dots Indicator

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java ViewPager && Fragment Study && Dots Indicator相关的知识,希望对你有一定的参考价值。

## ViewPager + Fragment Study  
  
#### viewPager  
1.viewPager >> ViewPagerActivity.java  
2.Fragment(Define a Fragment) >> ViewPagerFragment.java  
3.pagerAdapter(Setup FragmentPagerAdapter)>> ViewPagerActivity.java   
  
    <!-- activity_screen_slide.xml -->
    <android.support.v4.view.ViewPager
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
  
*************************  
  
#### ViewPager With Dots Indicator  
  
![](https://i.stack.imgur.com/gmHJe.png)  
  
All we need are: ViewPager, TabLayout and 2 drawables for selected and default dots.  
Firstly, we have to add TabLayout to our screen layout, and connect it with ViewPager.  
  
Separate TabLayout  

    <android.support.v4.view.ViewPager
        android:id="@+id/photos_viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
      
    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>  
  
###### In this case, we can put TabLayout anywhere, but we have to connect TabLayout with ViewPager programmatically.  
  
    ViewPager pager = (ViewPager) view.findViewById(R.id.photos_viewpager);
    PagerAdapter adapter = new PhotosAdapter(getChildFragmentManager(), photosUrl);
    pager.setAdapter(adapter);
    
    TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
    tabLayout.setupWithViewPager(pager, true);  
  
###### Once we created our layout, we have to prepare our dots. So we create three files: selected_dot.xml, default_dot.xml and tab_selector.xml.  
  
selected_dot.xml 

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape
                android:innerRadius="0dp"
                android:shape="ring"
                android:thickness="8dp"
                android:useLevel="false">
                <solid android:color="@color/colorAccent"/>
            </shape>    
        </item>
    </layer-list>
  
default_dot.xml  

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape
                android:innerRadius="0dp"
                android:shape="ring"
                android:thickness="8dp"
                android:useLevel="false">
                <solid android:color="@android:color/darker_gray"/>
            </shape>    
        </item>
    </layer-list>
  
tab_selector.xml  

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@drawable/selected_dot"
              android:state_selected="true"/>
        <item android:drawable="@drawable/default_dot"/>
    </selector>  
  
#######Now we need to add only 3 lines of code to TabLayout in our xml layout.  
  
    app:tabBackground="@drawable/tab_selector"
    app:tabGravity="center"
    app:tabIndicatorHeight="0dp"  
  
*************************************
#### 如何理解INFLATE第三個參數<View view = inflater.inflate(R.layout.fragmentview_pager, container, false);>  
  
(http://www.cnblogs.com/yuxing/archive/2012/02/18/2357740.html)
public class ViewPagerFragment extends Fragment {

    private static final String TAG = "ViewPagerFragment";

    private static final String ARG_PAGE = "PAGE";
    private static final String ARG_IMAGE = "IMAGE";

    private int mPageNumber;
    private int resImageId = 0;

    public static ViewPagerFragment newInstance(int pageNumber, int resImageId) {
        ViewPagerFragment fragment = new ViewPagerFragment();
        Bundle args = new Bundle(1);
        args.putInt(ARG_PAGE, pageNumber);
        args.putInt(ARG_IMAGE, resImageId);
        fragment.setArguments(args);
        return fragment;
    }

    public ViewPagerFragment() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        init();

        initHandler();

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_view_pager, container, false);

        return view;
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        TextView tvLabel = (TextView) view.findViewById(R.id.text1);
        ImageView img = (ImageView) view.findViewById(R.id.img1);

        tvLabel.setText("Page" + mPageNumber);
        img.setImageResource(resImageId);
    }

    public int getPageNumber() {
        return mPageNumber;
    }

    private void init() {
        mPageNumber = getArguments().getInt(ARG_PAGE);
        resImageId = getArguments().getInt(ARG_IMAGE);
    }

    private void initHandler() {
    }
}
public class ViewPagerActivity extends FragmentActivity {

    private static final String TAG = "ViewpagerActivity";
    //variable declaration
    private ViewPager mViewPager;

    private PagerAdapter mPagerAdapter;

    //array to store pictures
    private List<Fragment> getFragment(){
        List<Fragment> fragments = new ArrayList<Fragment>();
        fragments.add(ViewPagerFragment.newInstance(1, android.R.drawable.ic_menu_camera));
        fragments.add(ViewPagerFragment.newInstance(2, android.R.drawable.ic_menu_camera));
        fragments.add(ViewPagerFragment.newInstance(3, android.R.drawable.ic_menu_camera));
        fragments.add(ViewPagerFragment.newInstance(4, android.R.drawable.ic_menu_camera));
        fragments.add(ViewPagerFragment.newInstance(5, android.R.drawable.ic_menu_camera));

        return fragments;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view_pager);

        init();

        initHandler();
    }

    private void init() {

        // Instantiate a ViewPager and a PagerAdapter.
        mViewPager = (ViewPager) findViewById(R.id.viewpager);
        List<Fragment> fragments = getFragment();

        mPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), fragments);
        mViewPager.setAdapter(mPagerAdapter);
        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener());
    }

    private void initHandler() {

    }

//    viewPager Adapter inner class
    private static class ViewPagerAdapter extends FragmentPagerAdapter {

        private List<Fragment> fragments;

        public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragments){
            super(fm);
            this.fragments = fragments;
        }

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

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

以上是关于java ViewPager && Fragment Study && Dots Indicator的主要内容,如果未能解决你的问题,请参考以下文章

ViewPager2&TabLayout:拓展出一个文本选中放大效果

Android之ListView&ViewPager模拟新闻界面

新建项目&使用viewPager实现一个Android电子书阅读APP

FragmentPagerAdapter&FragmentStatePageAdapter整理

重用 ViewPager 和 FragmentPagerAdapter 的片段

如何使用导航抽屉和viewpager/viewpager2在java中制作android应用程序