Examples explain some advanced use techniques for Viewpager components in Android _android

Source: Internet
Author: User
Tags object object stub

We often see apps that use Viewpager, and on each page there is a slider to flag which page is currently on. There are Android.support.v4.view.PagerTitleStrip and android.support.v4.view.PagerTabStrip two components in the Pagerview package, which can be used as a child label for Viewpager in the layout file and Sets the position relative to the Viewpager (for example, top). But these two components are ugly, and the title will slide along with the page, so generally not.

In fact, the implementation of a slider mark the current page is also very simple, probably need two steps:

The first step is to place a ImageView component above the layout file Viewpager, which can be either a picture or a shape resource. Note that the ImageView ScaleType attribute needs to be set to matrix, which means that the position and size of the component are controlled by a transformation matrix;

The second step is to add a Onpagechangelistener listener for the Viewpager component in the activity. Set the matrix in the Onpagechangelistener to control where the slider ImageView. The listener needs to implement three methods:

Onpagescrollstatechanged: A change to monitor the sliding state

Onpagescrolled: An action used to monitor a slide

onpageseleted: A switch for listening to a page in which a page is selected as the current page.

The general implementation of the Onpageselected method can be, the other two methods can be empty. In addition, in order for the page to switch the slider is also smooth sliding, you can give the slider ImageView specify a translateanimation animation, specify animation with Setanimation,tranlateanimation is also very simple, There is a constructor that is translateanimation (int beginx,int endx,int beginy,int EndY) and passes the starting and ending position of the motion vector to it.

Here's a look at five specific examples:


One implementation Viewpager (data source is list<view>)

1. First add a viewpager to the Main.xml file:

<linearlayout xmlns:android= "http://schemas.android.com/apk/res/android" 
  android:layout_width= "Match_ Parent " 
  android:layout_height=" match_parent "> 
 
  <android.support.v4.view.viewpager 
    android:id= "@+id/pager" 
    android:layout_width= "wrap_content" 
    android:layout_height= "wrap_content" > 
  </ Android.support.v4.view.viewpager> 
 
</LinearLayout> 

2. Create three view:

 <?xml version= "1.0" encoding= "Utf-8"?> <linearlayout "xmlns:android=" Schemas.android.com/apk/res/android "android:layout_width=" match_parent "android:layout_height=" Match_parent "and 
    roid:orientation= "vertical" > <textview android:id= "@+id/txt1" android:layout_width= "Wrap_content" android:layout_height= "wrap_content" android:layout_gravity= "center" android:textsize= "25DP" Android:tex t= "First page" > </TextView> </LinearLayout> 
<?xml version= "1.0" encoding= "Utf-8"?> <linearlayout xmlns:android= 
"http://schemas.android.com/apk/" Res/android " 
  android:layout_width=" match_parent " 
  android:layout_height=" match_parent " 
  android:o" rientation= "vertical" > 
 
  <textview 
    android:id= "@+id/txt2" android:layout_width= "Wrap_content" 
    android:layout_height= "wrap_content" 
    android:text= "second page" > 
  </TextView> 
   
</ Linearlayout> 

<?xml version= "1.0" encoding= "Utf-8"?> <linearlayout xmlns:android=
"http://schemas.android.com/apk/" Res/android "
  android:layout_width=" match_parent "
  android:layout_height=" match_parent "
  android:o" rientation= "vertical" >
  
  <textview
    android:id= "@+id/txt3" android:layout_width= "WRAP_"
    Content "
    android:layout_height=" wrap_content "
    android:text=" third page ">
  </TextView>
  
</LinearLayout>

3. Create a Viewpager adapter class:

Package Com.yayun.viewpagerdemo; 
 
Import java.util.ArrayList; 
Import java.util.List; 
 
Import Android.support.v4.view.PagerAdapter; 
Import Android.view.View; 
Import Android.view.ViewGroup; 
 
public class Viewpageradapter extends Pageradapter { 
  private list<view> lviews=new arraylist<view> (); C8/>public Viewpageradapter (list<view> lviews) { 
    this.lviews=lviews; 
  } 
 
  @Override public 
  int GetCount () {return 
    lviews.size (); 
  } 
 
  @Override Public 
  Boolean isviewfromobject (View arg0, Object arg1) {return 
    arg0==arg1; 
  } 
  @Override public 
  Object instantiateitem (viewgroup container, int position) { 
    Container.addview lviews.get ( position)); 
    return Lviews.get (position); 
  } 
  @Override public 
  void Destroyitem (ViewGroup container, int position, object object) { 
    Container.removeview ( Lviews.get (position)); 
  } 
 
 

4.mainactivity.java:

Package Com.yayun.viewpagerdemo; 
Import java.util.ArrayList; 
 
Import java.util.List; 
Import android.support.v7.app.ActionBarActivity; 
Import Android.support.v7.app.ActionBar; 
Import android.support.v4.app.Fragment; 
Import Android.support.v4.view.PagerAdapter; 
Import Android.support.v4.view.ViewPager; 
Import Android.os.Bundle; 
Import Android.view.LayoutInflater; 
Import Android.view.Menu; 
Import Android.view.MenuItem; 
Import Android.view.View; 
Import Android.view.ViewGroup; 
Import Android.view.Window; 
 
Import Android.os.Build; 
  public class Mainactivity extends Actionbaractivity {private Viewpager viewpager; 
  Private list<view> Listviews=null; 
 
  Viewpageradapter Pageradapter; 
    @Override protected void OnCreate (Bundle savedinstancestate) {super.oncreate (savedinstancestate); 
    Requestwindowfeature (Window.feature_no_title); 
     
    Setcontentview (R.layout.activity_main); 
    Viewpager= (Viewpager) Findviewbyid (R.id.pager); Listviews=nEW arraylist<view> (); 
    /** * Create data source for Adapter/View view1=view.inflate (this, r.layout.view1, null); 
    View View2=view.inflate (this, r.layout.view2, null); 
    View View3=view.inflate (this, r.layout.view3, null); 
    Listviews.add (View1); 
    Listviews.add (VIEW2); 
    Listviews.add (VIEW3); 
    Pageradapter=new Viewpageradapter (listviews); 
 
  Viewpager.setadapter (Pageradapter); 

 } 
 
}

5. Run instance:


You can achieve a paging effect.

Two Add a title
1. We need to change the Main.xml file:

<linearlayout xmlns:android= "http://schemas.android.com/apk/res/android" 
  android:layout_width= "Match_ Parent " 
  android:layout_height=" match_parent "> 
 
  <android.support.v4.view.viewpager 
    android:id= "@+id/pager" 
    android:layout_width= "wrap_content" 
    android:layout_height= "Wrap_content" 
    android: layout_gravity= "center" > 
 
    <android.support.v4.view.pagertabstrip 
      android:id= "@+id/strip" 
      Android:layout_width= "Wrap_content" 
      android:layout_height= "wrap_content" 
      android:layout_gravity= "top "> 
    </android.support.v4.view.PagerTabStrip> 
  </android.support.v4.view.ViewPager> 
 
</LinearLayout> 

2. Need to change adapter file:

Package Com.yayun.viewpagerdemo; 
Import java.util.ArrayList; 
 
Import java.util.List; 
Import Android.support.v4.view.PagerAdapter; 
Import Android.view.View; 
 
Import Android.view.ViewGroup; 
  public class Viewpageradapter extends Pageradapter {private list<view> lviews=new arraylist<view> (); 
   
  Private list<string> titlelist=new arraylist<string> (); 
    Public Viewpageradapter (list<view> lviews,list<string> titlelist) {this.lviews=lviews; 
  This.titlelist=titlelist; 
  @Override public int GetCount () {return lviews.size (); 
  @Override public boolean isviewfromobject (View arg0, Object arg1) {return arg0==arg1; @Override public Object Instantiateitem (viewgroup container, int position) {Container.addview Lviews.get (pos 
    ition)); 
  return Lviews.get (position); @Override public void Destroyitem (ViewGroup container, int position, object object) {Container.removeview (lViews.get (position)); /** * Title * * @Override public charsequence getpagetitle (int position) {//TODO auto-generated Meth 
  OD stub return titlelist.get (position); 
 } 
 
}

3. Need to change the Mainactivity.java file:

Package Com.yayun.viewpagerdemo; 
Import java.util.ArrayList; 
 
Import java.util.List; 
Import android.support.v7.app.ActionBarActivity; 
Import Android.support.v7.app.ActionBar; 
Import android.support.v4.app.Fragment; 
Import Android.support.v4.view.PagerAdapter; 
Import Android.support.v4.view.PagerTabStrip; 
Import Android.support.v4.view.ViewPager; 
Import Android.os.Bundle; 
Import Android.view.LayoutInflater; 
Import Android.view.Menu; 
Import Android.view.MenuItem; 
Import Android.view.View; 
Import Android.view.ViewGroup; 
Import Android.view.Window; 
 
Import Android.os.Build; 
  public class Mainactivity extends Actionbaractivity {private Viewpager viewpager; 
  Private list<view> Listviews=null; 
  Viewpageradapter Pageradapter; 
  Pagertabstrip Pagertabstrip; 
 
  Private list<string> titlelist; 
    @Override protected void OnCreate (Bundle savedinstancestate) {super.oncreate (savedinstancestate); Requestwindowfeature (Window.feature_no_title);
    Setcontentview (R.layout.activity_main); 
    Viewpager= (Viewpager) Findviewbyid (R.id.pager); 
    pagertabstrip= (Pagertabstrip) Findviewbyid (R.id.strip); 
    Listviews=new arraylist<view> (); 
    Titlelist=new arraylist<string> (); 
    Titlelist.add ("first page"); 
    Titlelist.add ("second page"); 
    Titlelist.add ("third page"); 
    /** * Create data source for Adapter/View view1=view.inflate (this, r.layout.view1, null); 
    View View2=view.inflate (this, r.layout.view2, null); 
    View View3=view.inflate (this, r.layout.view3, null); 
    Listviews.add (View1); 
    Listviews.add (VIEW2); 
    Listviews.add (VIEW3); 
    Pageradapter=new Viewpageradapter (listviews,titlelist); 
 
  Viewpager.setadapter (Pageradapter); 

 } 
 
}

4. The running example is as follows:

Three implementation Viewpager (data source is list<fragment>)
1. First we want to create three fragment:

Package Com.yayun.viewpagerdemo; 
Import Android.os.Bundle; 
Import android.support.v4.app.Fragment; 
Import Android.view.LayoutInflater; 
Import Android.view.View; 
 
Import Android.view.ViewGroup; public class Fragment1 extends Fragment {@Override public View oncreateview (layoutinflater inflater, ViewGroup cont 
  Ainer, Bundle savedinstancestate) {return inflater.inflate (R.layout.view1, container, false); 
 
}} package Com.yayun.viewpagerdemo; 
Import Android.os.Bundle; 
Import android.support.v4.app.Fragment; 
Import Android.view.LayoutInflater; 
Import Android.view.View; 
 
Import Android.view.ViewGroup; public class Fragment2 extends Fragment {@Override public View oncreateview (layoutinflater inflater, ViewGroup cont 
  Ainer, Bundle savedinstancestate) {return inflater.inflate (R.layout.view2, container, false); 
 
}} package Com.yayun.viewpagerdemo; 
Import Android.os.Bundle; 
Import android.support.v4.app.Fragment; Import anDroid.view.LayoutInflater; 
Import Android.view.View; 
 
Import Android.view.ViewGroup; public class Fragment3 extends Fragment {@Override public View oncreateview (layoutinflater inflater, ViewGroup cont 
  Ainer, Bundle savedinstancestate) {return inflater.inflate (R.LAYOUT.VIEW3, container, false); 

 } 
 
}

2. Set Adapter:

Package Com.yayun.viewpagerdemo; 
 
Import java.util.List; 
Import android.support.v4.app.Fragment; 
Import Android.support.v4.app.FragmentManager; 
 
Import Android.support.v4.app.FragmentPagerAdapter; 
  public class Myfragmentpageradapter extends Fragmentpageradapter {list<fragment> fragmentslist; 
 
  List<string> titlelist; 
    Public Myfragmentpageradapter (Fragmentmanager fm,list<fragment> fragmentslist,list<string> titleList) { 
    Super (FM); 
    This.fragmentslist=fragmentslist; 
  This.titlelist=titlelist; @Override public Fragment getitem (int arg0) {//TODO auto-generated a stub return fragmentslist. 
  Get (ARG0); 
  @Override public int GetCount () {//TODO auto-generated a stub return fragmentslist.size (); 
  @Override/** * Add title */public charsequence getpagetitle (int position) {//TODO auto-generated method stub 
return Titlelist.get (position); 

 } 
 
}

3.mainactivity.java:

Package Com.yayun.viewpagerdemo; 
Import java.util.ArrayList; 
 
Import java.util.List; 
Import Android.graphics.Color; 
Import Android.os.Bundle; 
Import android.support.v4.app.Fragment; 
Import Android.support.v4.view.PagerTabStrip; 
Import Android.support.v4.view.ViewPager; 
Import Android.support.v4.view.ViewPager.PageTransformer; 
Import android.support.v7.app.ActionBarActivity; 
Import Android.view.View; 
 
Import Android.view.Window; 
  public class Mainactivity extends Actionbaractivity {private Viewpager viewpager; 
  Private list<view> Listviews=null; 
  Viewpageradapter Pageradapter; 
  Pagertabstrip Pagertabstrip; 
  Private list<string> titlelist; 
  Private list<fragment> fragmentslist; 
 
  Myfragmentpageradapter Myfragmentpageradapter; 
    @Override protected void OnCreate (Bundle savedinstancestate) {super.oncreate (savedinstancestate); 
    Requestwindowfeature (Window.feature_no_title); 
     
 Setcontentview (R.layout.activity_main);   Viewpager= (Viewpager) Findviewbyid (R.id.pager); 
     
    pagertabstrip= (Pagertabstrip) Findviewbyid (R.id.strip); 
    /** * Set the Pagertabstrip property * * Pagertabstrip.setbackgroundcolor (Color.green); 
    Pagertabstrip.setdrawfullunderline (FALSE); 
    Pagertabstrip.settextcolor (Color.White); 
    Listviews=new arraylist<view> (); 
    Titlelist=new arraylist<string> (); 
    Fragmentslist=new arraylist<fragment> (); 
    Fragmentslist.add (New Fragment1 ()); 
    Fragmentslist.add (New Fragment2 ()); 
    Fragmentslist.add (New Fragment3 ()); 
    Titlelist.add ("first page"); 
    Titlelist.add ("second page"); 
    Titlelist.add ("third page"); 
    /** * Create data source for Adapter/View view1=view.inflate (this, r.layout.view1, null); 
    View View2=view.inflate (this, r.layout.view2, null); 
    View View3=view.inflate (this, r.layout.view3, null); 
    Listviews.add (View1); 
    Listviews.add (VIEW2); 
    Listviews.add (VIEW3); Pageradapter=new Viewpageradapter (Listviews,tiTlelist); 
    Myfragmentpageradapter=new Myfragmentpageradapter (Getsupportfragmentmanager (), fragmentslist, titleList); 
    Viewpager.setadapter (Pageradapter); 
 
  Viewpager.setadapter (Myfragmentpageradapter); 

 } 
 
}


4. Run instance:

This method does not destroy pages that are not on the current page, and cannot implement the creation and destruction of page cards.

Four implementation Viewpager (data source for list<fragment> implementation fargmentstatepageradapter) commonly used
Change Adapter:

Package Com.yayun.viewpagerdemo; 
 
Import java.util.List; 
Import android.support.v4.app.Fragment; 
Import Android.support.v4.app.FragmentManager; 
Import Android.support.v4.app.FragmentPagerAdapter; 
Import Android.support.v4.app.FragmentStatePagerAdapter; 
 
Import Android.view.View; 
  public class MyFragmentPagerAdapter2 extends Fragmentstatepageradapter {list<fragment> fragmentslist; 
 
  List<string> titlelist; Public MyFragmentPagerAdapter2 (Fragmentmanager fm,list<fragment> fragmentslist,list<string> titlelist) 
    {super (FM); 
    This.fragmentslist=fragmentslist; 
  This.titlelist=titlelist; @Override public Fragment getitem (int arg0) {//TODO auto-generated a stub return fragmentslist. 
  Get (ARG0); 
  @Override public int GetCount () {//TODO auto-generated a stub return fragmentslist.size (); @Override/** * Add title */public charsequence getpagetitle (int position) {/TODO Auto-generated Method Stub return Titlelist.get (position); @Override public Object Instantiateitem (View container, int position) {//TODO auto-generated method stub retur 
n Super.instantiateitem (container, position);  
  @Override public void Destroyitem (View container, int position, object object) {//TODO auto-generated the method stub 
Super.destroyitem (container, Position, object); 
 } 
 
}

Change the adapter in the Mainactivity.java, which enables the creation and destruction of page cards.

Five Onpagerchangelistener listening and using
only need to modify Mainactivity.java:

Package Com.yayun.viewpagerdemo; 
Import java.util.ArrayList; 
 
Import java.util.List; 
Import Android.graphics.Color; 
Import Android.os.Bundle; 
Import android.support.v4.app.Fragment; 
Import Android.support.v4.view.PagerTabStrip; 
Import Android.support.v4.view.ViewPager; 
Import Android.support.v4.view.ViewPager.OnPageChangeListener; 
Import Android.support.v4.view.ViewPager.PageTransformer; 
Import android.support.v7.app.ActionBarActivity; 
Import Android.view.View; 
Import Android.view.Window; 
 
Import Android.widget.Toast; 
  public class Mainactivity extends Actionbaractivity implements Onpagechangelistener {private Viewpager viewpager; 
  Private list<view> Listviews=null; 
  Viewpageradapter Pageradapter; 
  Pagertabstrip Pagertabstrip; 
  Private list<string> titlelist; 
  Private list<fragment> fragmentslist; 
 
  Myfragmentpageradapter Myfragmentpageradapter; @Override protected void OnCreate (Bundle savedinstancestate) {super.oncreate (Savedinstancestate); 
    Requestwindowfeature (Window.feature_no_title); 
     
    Setcontentview (R.layout.activity_main); 
    Viewpager= (Viewpager) Findviewbyid (R.id.pager); 
     
    pagertabstrip= (Pagertabstrip) Findviewbyid (R.id.strip); 
    /** * Set the Pagertabstrip property * * Pagertabstrip.setbackgroundcolor (Color.green); 
    Pagertabstrip.setdrawfullunderline (FALSE); 
    Pagertabstrip.settextcolor (Color.White); 
    Listviews=new arraylist<view> (); 
    Titlelist=new arraylist<string> (); 
    Fragmentslist=new arraylist<fragment> (); 
    Fragmentslist.add (New Fragment1 ()); 
    Fragmentslist.add (New Fragment2 ()); 
    Fragmentslist.add (New Fragment3 ()); 
    Titlelist.add ("first page"); 
    Titlelist.add ("second page"); 
    Titlelist.add ("third page"); 
    /** * Create data source for Adapter/View view1=view.inflate (this, r.layout.view1, null); 
    View View2=view.inflate (this, r.layout.view2, null); 
    View View3=view.inflate (this, r.layout.view3, null); LIstviews.add (View1); 
    Listviews.add (VIEW2); 
    Listviews.add (VIEW3); 
    Pageradapter=new Viewpageradapter (listviews,titlelist); 
    Myfragmentpageradapter=new Myfragmentpageradapter (Getsupportfragmentmanager (), fragmentslist, titleList); 
    Viewpager.setadapter (Pageradapter); 
    Viewpager.setadapter (Myfragmentpageradapter); 
    Viewpager.setonpagechangelistener (this);//Load listener} @Override public void onpagescrollstatechanged (int arg0) { TODO auto-generated Method stub} @Override public void onpagescrolled (int arg0, float arg1, int ARG2) {//TODO auto-generated method stub} @Override public void onpageselected (int arg0) {T 
     
  Oast.maketext (This, "current page is" + (arg0+1), Toast.length_short). Show (); 

 } 
 
}

Run the instance to display the current page label.

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.