"Android" Android picture Carousel

Source: Internet
Author: User

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

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.