Giter VIP home page Giter VIP logo

android-viewpagerindicator's Introduction

Icon Page Indicator

An edit to Jake Wharton's ViewPagerIndicator library giving users the ability to use drawable icons as indicators the same way text was used in the TitlePageIndicator class. Full README for Jake's original class is below this section.

IconPageIndicator Sample Screenshots

Usage

For a working implementation of the IconPageIndicator class see the sample/ folder. Try changing the drawables to see how it works!

  1. Include the IconPageIndicator widget in your view:

    <com.viewpagerindicator.IconPageIndicator android:id="@+id/indicator" android:padding="5dp" android:layout_height="wrap_content" android:layout_width="fill_parent" />

  2. In your onCreate method (or onCreateView for a fragment), bind the indicator to the ViewPager:

    //From the sample, note that IconPagerAdapter is a simple nested class I created ViewPager pager = (ViewPager)findViewById(R.id.viewpager); IconPagerAdapter adapter = new IconPagerAdapter(); pager.setAdapter(adapter); pager.setCurrentItem(1); //set this to whatever you want to start with focus IconPageIndicator indicator = (IconPageIndicator)findViewById(R.id.indicator); indicator.setViewPager(pager, 1); //set the int to the same page that has focus above

    Resources res = this.getResources(); float density = res.getDisplayMetrics().density;

    indicator.setTopPadding(8 * density); //set whatever other features you want

  3. Implementing the IconProvider Interface requires overriding the method getIconArray method. For each view in your ViewPager, you must provide an array of length 3 providing the desired drawable for when the view is at the left, center, and right position in indicies 0, 1 and 2 respectively. An example of this implementation is below (as well as in the sample app):

    @Override public Integer[] getIconArray(int i) { switch(i) { case LEFT_ACTIVITY : Integer[] mainDrawables = {R.drawable.arrow_left, R.drawable.leftlogo, R.drawable.arrow_right}; return mainDrawables; case CENTER_ACTIVITY : Integer[] settingsDrawables = {R.drawable.arrow_left, R.drawable.uglylogo, R.drawable.arrow_right}; return settingsDrawables; case RIGHT_ACTIVITY : Integer[] friendDrawables = {R.drawable.rightlogomini, R.drawable.rightlogo, R.drawable.rightlogomini}; return friendDrawables; default : throw new IllegalArgumentException("Page does not exist"); } }

    Note that for each activity you are specifying the icons for the activities' relative position on the screen, NOT the icons that will necessarily appear on that view. For the above example, the center activity will show the ugly logo drawable in the center when it is in focus, the arrow_right icon when it is to the right of the view in focus, and the arrow_left icon when it is to the left of the view in focus.

    In the right activity, it shows the rightlogo when it is the view in focus. However, the left and right icons will NOT be rightlogomini when it is in focus. Instead, the center activity's left icon, arrow_left will be shown, because the center activity is to the left of the view in focus. rightlogomini will appear when the view in focus is the center activity (when the right activity is to the right of the focus).

    This may sound a bit counter-intuitive, but it allows for users to easily add or rearrange the order of their views without needing to reconfigure their icons every single time.

Give it a try and give me some feedback! You can reach me via email directly at [email protected], or just PM me on github. Thanks to Jake Wharton for this fantastic library, I'm glad I could add a neat feature to it.

Android ViewPagerIndicator

Port of Patrik Åkerfeldt's paging indicators that are compatible with the ViewPager from the Android Compatibility Library and ActionBarSherlock.

Try out the sample application on the Android Market.

ViewPagerIndicator Sample Screenshots

Usage

For a working implementation of this project see the sample/ folder.

  1. Include one of the widgets in your view. This should usually be placed adjacent to the ViewPager it represents.

    <com.viewpagerindicator.TitlePageIndicator android:id="@+id/titles" android:layout_height="wrap_content" android:layout_width="fill_parent" />

  2. In your onCreate method (or onCreateView for a fragment), bind the indicator to the ViewPager.

    //Set the pager with an adapter
    ViewPager pager = (ViewPager)findViewById(R.id.pager);
    pager.setAdapter(new TestAdapter(getSupportFragmentManager()));
    
    //Bind the title indicator to the adapter
    TitlePageIndicator titleIndicator = (TitlePageIndicator)findViewById(R.id.titles);
    titleIndicator.setViewPager(pager);
    

    Note: If you are using TitlePageIndicator your adapter must implement TitleProvider.

  3. (Optional) If you use an OnPageChangeListener with your view pager you should set it in the indicator rather than on the pager directly.

    //continued from above
    titleIndicator.setOnPageChangeListener(mPageChangeListener);
    

Theming

There are three ways to style the look of the indicators.

  1. Theme XML. An attribute for each type of indicator is provided in which you can specify a custom style.
  2. Layout XML. Through the use of a custom namespace you can include any desired styles.
  3. Object methods. Both styles have getters and setters for each style attribute which can be changed at any point.

Each indicator has a demo which creates the same look using each of these methods.

Including In Your Project

Android-ViewPagerIndicator is presented as an Android library project. A standalone JAR is not possible due to the theming capabilities offered by the indicator widgets.

You can include this project by referencing it as a library project in Eclipse or ant.

If you are a Maven user you can easily include the library by specifying it as a dependency:

<dependency>
  <groupId>com.viewpagerindicator</groupId>
  <artifactId>library</artifactId>
  <version>2.2.3</version>
  <type>apklib</type>
</dependency>

You must also include the following repository:

<repository>
  <id>com.jakewharton</id>
  <url>http://r.jakewharton.com/maven/release</url>
</repository>

This project depends on the ViewPager class which is available in the Android Compatibility Library or ActionBarSherlock. Details for including one of those libraries is available on their respecitve web sites.

Developed By

Credits

License

Copyright 2011 Patrik Åkerfeldt
Copyright 2011 Francisco Figueiredo Jr.
Copyright 2011 Jake Wharton
Copyright 2012 Jesse Ridgway

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

android-viewpagerindicator's People

Contributors

jakewharton avatar jdamcd avatar jmrboosties avatar ohhorob avatar protyposis avatar rtyley avatar scottanderson avatar simonvt avatar vdesmet93 avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.