First step, write a layout file first
<com.main.util.slideshowview android:id= "@+id/slideshowview" android:layout_width= "Fill_parent" android:layout_height= "300DP" android:layout_centerhorizontal= "true" />
The second step, the Java code
Package Com.main.util;import Java.util.arraylist;import Java.util.list;import java.util.concurrent.Executors; Import Java.util.concurrent.scheduledexecutorservice;import Java.util.concurrent.timeunit;import Com.main.R; Import Android.content.context;import Android.graphics.drawable.drawable;import Android.os.handler;import Android.os.message;import Android.os.parcelable;import Android.support.v4.view.pageradapter;import Android.support.v4.view.viewpager;import Android.support.v4.view.viewpager.onpagechangelistener;import Android.util.attributeset;import Android.view.layoutinflater;import Android.view.view;import Android.widget.framelayout;import Android.widget.imageview;import Android.widget.imageview.scaletype;public Class SlideShowView extends Framelayout {//Carousel graph picture number private final static int image_count = 5; Self-active carousel interval private final static int time_interval = 5; Own active carousel enable switch private final static Boolean isautoplay = true; Self-defining the resource ID of the Carousel Map private int[] ImagesrEsids; The ImageView List private list<imageview> imageviewslist of the carousel picture; The List private list<view> dotviewslist of the point View; Private Viewpager Viewpager; Current Carousel page private int currentitem = 0; Timed tasks private Scheduledexecutorservice scheduledexecutorservice; Handler private Handler Handler = new Handler () {@Override public void Handlemessage (Message msg) { TODO auto-generated Method Stub super.handlemessage (msg); Viewpager.setcurrentitem (CurrentItem); } }; Public SlideShowView (Context context) {this (context,null); TODO auto-generated Constructor stub} public SlideShowView (context context, AttributeSet Attrs) {This (CO ntext, attrs, 0); TODO auto-generated Constructor stub} public SlideShowView (context context, AttributeSet attrs, int defstyle) { Super (context, attrs, Defstyle); TODO auto-generated ConstrUctor stub initdata (); Initui (context); if (isautoplay) {startplay (); }}/** * Start carousel switch */private void Startplay () {scheduledexecutorservice = Executors.newsin Glethreadscheduledexecutor (); Scheduledexecutorservice.scheduleatfixedrate (New Slideshowtask (), 1, 4, timeunit.seconds); }/** * Stop carousel Graph Toggle */private void Stopplay () {Scheduledexecutorservice.shutdown (); /** * Initialize related data */private void InitData () {imagesresids = new int[]{//picture data r.drawab LE.P1, R.DRAWABLE.P2,}; Imageviewslist = new arraylist<imageview> (); Dotviewslist = new arraylist<view> (); }/** * Initialize views and other UI */private void Initui (context context) {Layoutinflater.from (context). Inflate (R.L Ayout.imageviewpager, this, true); for (int imageid:imagesresids) {ImageView view = new ImageView (conText); View.setimageresource (ImageID); View.setscaletype (SCALETYPE.FIT_XY); Imageviewslist.add (view); } dotviewslist.add (Findviewbyid (R.ID.V_DOT1)); Dotviewslist.add (Findviewbyid (R.id.v_dot2)); Viewpager = (Viewpager) Findviewbyid (R.id.viewpager); Viewpager.setfocusable (TRUE); Viewpager.setadapter (New Mypageradapter ()); Viewpager.setonpagechangelistener (New Mypagechangelistener ()); }/** * Fill Viewpager page adapter * @author caizhiming */Private class Mypageradapter extends Pageradapter {@Override public void Destroyitem (View container, int position, object object) {//TODO auto-g enerated method Stub//((Viewpag.er) container). Removeview ((View) object); ((Viewpager) container). Removeview (Imageviewslist.get (position)); } @Override Public Object instantiateitem (View container, int position) {//TODO auto-generated Method Stub ((Viewpager) container). AddView (Imageviewslist.get (position)); return Imageviewslist.get (position); } @Override public int getcount () {//TODO auto-generated method stub return Imagevie Wslist.size (); } @Override public boolean isviewfromobject (View arg0, Object arg1) {//TODO auto-generated Meth OD stub return arg0 = = Arg1; } @Override public void Restorestate (parcelable arg0, ClassLoader arg1) {//TODO auto-generated Method stub} @Override public Parcelable saveState () {//TODO auto-generated method stub return null; } @Override public void Startupdate (View arg0) {//TODO auto-generated method stub} @Override public void Finishupdate (View arg0) {//TODO auto-generated method stub } }/** * Viewpager listener * Called when the state of the page in Viewpager has changed * @author caizhiming */Private class Mypagech Angelistener Implements onpagechangelistener{Boolean isautoplay = false; @Override public void onpagescrollstatechanged (int arg0) {//TODO auto-generated method stub Switch (arg0) {case 1://gesture swipe, spare in isautoplay = false; Break Case 2://Interface Switch isautoplay = true; Break Case 0://Slide end, that is, the switch is complete or load complete//current is the last one, this time from right to left slide, then switch to the first if (viewpager.getcurrentitem () = = view Pager.getadapter (). GetCount ()-1 &&!isautoplay) {viewpager.setcurrentitem (0); }//is currently the first one. Now swipe from left to right, switch to the last else if (viewpager.getcurrentitem () = = 0 &&!isautoplay) {view Pager.setcurrentitem (Viewpager.getadapter (). GetCount ()-1);} break; }} @Override public void onpagescrolled (int arg0, float arg1, int arg2) {//TODO Auto-ge nerated method stub} @Override public void onpageselected (int pos) {//TODO auto-generated method Stub currentitem = pos; for (int i=0;i < dotviewslist.size (); i++) {if (i = = pos) {(View) Dotviewslist.get (POS)) . Setbackgroundresource (R.drawable.dot_black); }else {(View) dotviewslist.get (i)). Setbackgroundresource (R.drawable.dot_white); }}}}/** * Run the Carousel switch task * @author caizhiming */Private class SLIDESHOWTA SK Implements runnable{@Override public void Run () {//TODO auto-generated method stub Synchronized (viewpager) {CurrentItem = (currentitem+1)%imageviewslist.size (); Handler.obtainmessage (). Sendtotarget (); }}}/** * Destroys ImageView resource, reclaims memory * @author caizhiming */private void Destorybitmaps () { for (int i = 0; i < Image_count; i++) {ImageView ImageView = Imageviewslist.get (i); drawable drawable = imageview.getdrawable (); if (drawable! = null) {//delete drawable correct view reference drawable.setcallback (NULL); } } }}
"Android" Android picture Carousel