AboutActivity.java
About screen. This displays 3 pages in a
ViewPager:
–
About Plaid
–
Credit Roman for the awesome icon
–
Credit libraries
ViewPager associates
each page with a key Object instead of working with Views directly. This key is
used to track and uniquely identify a given page independent of its position in
the adapter
A very simple
PagerAdapter may choose to use the page Views themselves as key objects,
returning them from instantiateItem(ViewGroup,
int) after creation and adding them to the parent ViewGroup. A matching destroyItem(ViewGroup,
int, Object) implementation would remove the View from the parent ViewGroup
and isViewFromObject(View,
Object) could be implemented as return view == object;.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | static class AboutPagerAdapter extends PagerAdapter { private View aboutPlaid; @Nullable @Bind(R.id.about_description) TextView plaidDescription; private View aboutIcon; @Nullable @Bind(R.id.icon_description) TextView iconDescription; private View aboutLibs; @Nullable @Bind(R.id.libs_list) RecyclerView libsList; private final LayoutInflater layoutInflater; private final Bypass markdown; public AboutPagerAdapter(Context context) { layoutInflater = LayoutInflater.from(context); markdown = new Bypass(context, new Bypass.Options()); } @Override public Object instantiateItem(ViewGroup collection, int position) { View layout = getPage(position, collection); collection.addView(layout); return layout; } @Override public void destroyItem(ViewGroup collection, int position, Object view) { collection.removeView((View) view); } @Override public int getCount() { return 3; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } private View getPage(int position, ViewGroup parent) { switch (position) { case 0: if (aboutPlaid == null) { aboutPlaid = layoutInflater.inflate(R.layout.about_plaid, parent, false); : : return aboutPlaid; case 1: if (aboutIcon == null) { aboutIcon = layoutInflater.inflate(R.layout.about_icon, parent, false); ButterKnife.bind(this, aboutIcon); CharSequence icon0 = parent.getResources().getString(R.string.about_icon_0); CharSequence icon1 = markdown.markdownToSpannable(parent.getResources() .getString(R.string.about_icon_1), iconDescription, null); CharSequence iconDesc = TextUtils.concat(icon0, "\n", icon1); HtmlUtils.setTextWithNiceLinks(iconDescription, iconDesc); } return aboutIcon; case 2: if (aboutLibs == null) { aboutLibs = layoutInflater.inflate(R.layout.about_libs, parent, false); ButterKnife.bind(this, aboutLibs); libsList.setAdapter(new LibraryAdapter(parent.getContext())); } return aboutLibs; } throw new InvalidParameterException(); } } |
You will also find a
LibraryAdapter which is just a simple recyclerview adapter for recyclerview on
the third page which shows popular android opensource libraries.
Since we are doing
the Architecture explanation here , we will not go into details of how the elastic
effect is achieved and how awesomely that InkPageIndicator is implemented.
That info is for the
Learnings from Plaid series which will definitely cover in that series :-) till
that time just appreciate the effect.