Carrousel de photos de la page d'accueil
/** * Contrôle automatique de la rotation des images publicitaires</br> * */public class ImageCycleView extends LinearLayout { /** * Context*/ private Context mContext /** * Vue de rotation de l'image*/ private ViewPager mAdvPager = null; * * Adaptation de la vue de l'image de défilement*/privé ImageCycleAdapter mAdvAdapter; /** * Contrôle de l'indicateur de rotation de l'image*/privé ViewGroup mGroup /** * Le carrousel d'images indique chaque image */ private ImageView mImageView = null; /** * Faire défiler la liste d'affichage des instructions d'image */ private ImageView[] mImageViews = null /** * L'indice de défilement de l'image actuelle */ private boolean isStop; * Que le curseur soit rond ou long. S'il est défini sur 0, il sera long. S'il est défini sur 1, il sera rond. */ public int stype=1; contexte de paramètre */ public ImageCycleView(Contexte contextuel) { super(contexte); /** * @param context * @param attrs */ @SuppressLint("Recycle") public ImageCycleView(Contexte contextuel, AttributeSet attrs) { super(contexte, mContext); = contexte; LayoutInflater.from(context).inflate(R.layout.ad_cycle_view, this); (ViewPager) findViewById(R.id.adv_pager); mAdvPager.setOnPageChangeListener(new GuidePageChangeListener()); // Faites défiler l'indicateur inférieur droit de l'image mGroup = (ViewGroup) findViewById(R.id.viewGroup); * Toucher arrête le minuteur, l'ascenseur démarre le minuteur*/ @Override public boolean dispatchTouchEvent(MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_UP){ // Démarrer le défilement de l'image startImageTimerTask(); }else{ // Arrêter le défilement de l'image stopImageTimerTask( } return super.dispatchTouchEvent(event); } /** * Charger les données d'image * * @param imageUrlList * @param imageCycleViewListener */ public void setImageResources(ArrayList<Integer> imageUrlList,ImageCycleViewListener imageCycleViewListener,int stype){ this.stype=stype; // Clear mGroup.removeAllViews(); // Nombre d'annonces illustrées final int imageCount = imageUrlList.size(); mImageViews = new ImageView[imageCount]; pour (int i = 0; i < imageCount; i++) { mImageView = new ImageView(mContext); LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); mImageViews[i] = mImageView; if (i == 0) { if(this.stype==1)// mImageViews[i].setBackgroundResource(R.drawable.banner_dian_focus); .cicle_banner_dian_focus);//Changer pour autre mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_focus); } else { if(this.stype==1) // mImageViews[i].setBackgroundResource(R.drawable.banner_dian_blur); .drawable.cicle_banner_dian_blur); sinon mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur); } mGroup.addView(mImageViews[i]); } mAdvAdapter = new ImageCycleAdapter(mContext, imageUrlList,imageCycleViewListener); mAdvPager.setCurrentItem(Integer.MAX_VALUE/2); startImageTimerTask(); } public void setImageResources2(ArrayList<Integer> imageUrlList ,ImageCycleViewListener imageCycleViewListener,int stype){ this.stype=stype; Nombre d'annonces illustrées final int imageCount = imageUrlList.size(); mImageViews = new ImageView[imageCount]; pour (int i = 0; i < imageCount; i++) { mImageView = new ImageView(mContext); WRAP_CONTENT); params.leftMargin=30 ; mImageView.setScaleType(ScaleType.CENTER_CROP); mImageView.setLayoutParams(params); mImageViews[i] = mImageView; if (i == 0) { if (this.stype==1)// mImageViews[i].setBackgroundResource(R .drawable.banner_dian_focus); mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_focus);//Change else mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_focus); } else { if(this.stype==1) // mImageViews[i ] .setBackgroundResource(R.drawable.banner_dian_blur); mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur); else mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur); } mGroup.addView(mImageViews[i]); ,imageCycleViewListener); mAdvPager.setAdapter(mAdvAdapter); mAdvPager.setCurrentItem(Integer.MAX_VALUE/2); startImageTimerTask(); } /** * Carrousel d'images (contrôle manuel du carrousel automatique ou non, pratique pour le contrôle des ressources) */ public void startImageCycle() { startImageTimerTask(); Suspendre le carrousel - utilisé pour économiser les ressources*/ public void pushImageCycle() { stopImageTimerTask(); } /** * Tâche de défilement d'image*/ private void startImageTimerTask() { stopImageTimerTask(); // Défilement d'image mHandler.postDelayed(mImageTimerTask, 5000) ); } /** * Arrêter la tâche de défilement de l'image*/ private void stopImageTimerTask() { isStop=true; mHandler.removeCallbacks(mImageTimerTask); } private Handler mHandler = new Handler(); /** * Tâche de rotation automatique de l'image */ private Runnable mImageTimerTask = new Runnable() { @Override public void run ( ) { si (mImageViews != null) { mAdvPager.setCurrentItem(mAdvPager.getCurrentItem()+1); if(!isStop){ //if isStop=true //Lorsque vous quittez, vous devez arrêter cela, sinon il continuera d'exister et de boucler dans le mHandler en arrière-plan. postDelayed( mImageTimerTask, 5000); } } } }; /** * Surveillance des images du carrousel* * @author minking */ private classe finale GuidePageChangeListener implémente OnPageChangeListener { @Override public void onPageScrollStateChanged(int state) { if (state == ViewPager.SCROLL_STATE_IDLE) startImageTimerTask( } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageSelected (index int) { index=index%mImageViews.length; // Définit l'image actuellement affichée // Réinitialise l'indicateur de défilement de l'image if(stype!=1) mImageViews[index].setBackgroundResource(R.drawable.cicle_banner_dian_focus); .setBackgroundResource(R.drawable.cicle_banner_dian_focus); pour (int i = 0; i < mImageViews.length; i++) { if (index != i) { if(stype!=1) mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur); ; } } } } classe privée ImageCycleAdapter s'étend PagerAdapter { /** * Liste de cache d'affichage d'images*/ private ArrayList<SmartImageView> mImageViewCacheList; /** * Liste de ressources d'images*/ //private ArrayList<String> mAdList = new ArrayList<String>(); mAdList = new ArrayList<Integer>(); /** * Surveillance des clics sur l'image publicitaire*/ private ImageCycleViewListener mImageCycleViewListener ; contexte privé mContext ;// public ImageCycleAdapter (contexte de contexte, ArrayList<String> adList, ImageCycleViewListener imageCycleViewListener) {// this.mContext = contexte ; // this.mAdList = adList ; // mImageCycleViewListener = imageCycleViewListener ; nouveau ArrayList<SmartImageView>();// } public ImageCycleAdapter(Contexte contextuel, ArrayList<Integer> adList , ImageCycleViewListener imageCycleViewListener) { this.mContext = context; this.mAdList = adList; mImageCycleViewListener = mImageViewCacheList = new ArrayList<SmartImageView>( ); } @Remplacer public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject (View view, Object obj) { return view == obj; } @Override public Object instantiateItem (conteneur ViewGroup, position finale int) { int imageUrl = mAdList .get(position%mAdList.size()); Log.e("imageUrl:",position%mAdList.size()+"--"+imageUrl+""); SmartImageView imageView = null; if (mImageViewCacheList.isEmpty()) { imageView = new SmartImageView(mContext); .setLayoutParams(nouveau LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT) ); //tester imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); } else { imageView = mImageViewCacheList.remove(0); .setImageUrl(imageUrl); imageView.setBackgroundResource(imageUrl); //Définir l'écouteur de clic d'image imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mImageCycleViewListener.onImageClick(position%mAdList.size(), v); } }); public void destroyItem (conteneur ViewGroup, position int, objet Object) { Vue SmartImageView = (SmartImageView) object ; mAdvPager.removeView(view); mImageViewCacheList.add(view); } } /** * Écoute des événements pour le contrôle carrousel* * @author minking */ interface statique publique ImageCycleViewListener { /** * Cliquez sur l'image. Événement * * @param position * @param imageView */ public void onImageClick(int position, View imageView } })
Jetons un coup d'œil à un contrôle de carrousel d'images basé sur Android ViewPager
package me.lanfog.myandroid.widget ; importer java.util.ArrayList ; importer java.util.List ; importer android.content.Context ; importer android.os.Handler ; importer android.os.Message ; importer android.support.v4 .view.PagerAdapter; importer android.support.v4.view.ViewPager; importer android.util.AttributeSet; importer android.util.Log; importer android.view.View; importer android.view.ViewGroup; importer android.widget.ImageView; classe publique PageFlipper extends ViewPager { private String TAG = PageFlipper.class.getSimpleName(); vues ; adaptateur PagerAdapter privé = new PagerAdapter() { @Override public Object instantiateItem (conteneur ViewGroup, position int) { View v = vues.get(position); conteneur.addView(v); return v; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; vues.indexOf(object); } @Override public void destroyItem (conteneur ViewGroup, position int, objet Object) { conteneur.removeView((View)object); } @Override public int getCount() { return vues == null ? vues.size(); } }; Convertir la position du contrôle en position dans l'ensemble de données*/ public int convert(int position){ return position == 0 ? 0 : position-1 ); } @Override public void onPageSelected(int position) { if(listener2 != null){ listening2.onPageSelected(convert(position) } } @Override public void onPageScrolled(int position, float percent, int offset) { if(listener2 != null){ listening2.onPageScrolled(convert(position), percent, offset }) if(percent == 0){ if(position == 0) // Passer à l'avant-dernière page setCurrentItem(( vues.size() - 2 ) % vues.size(), false else if(position == vues); .size() - 1) // Passer à la deuxième page positive setCurrentItem(1, false); } } @Override public void onPageScrollStateChanged(int state) { if(listener2); != null){ Listener2.onPageScrollStateChanged(state); } switch (state) { case SCROLL_STATE_IDLE : // Idle if(!handler.hasMessages(START_FLIPPING)) handler.sendEmptyMessageDelayed(START_FLIPPING, 3000); SCROLL_STATE_DRAGGING : // Handler.sendEmptyMessage(STOP_FLIPPING); // Annuler la pause de défilement ; case SCROLL_STATE_SETTLING : // Le glissement termine la pause ; } } }, private final int START_FLIPPING = 0; private final int STOP_FLIPPING = 1 ; { public void handleMessage (Message msg) { commutateur (msg.what) { case START_FLIPPING : if(views.size() > 3) // Comme les pages recto et verso sont des pages auxiliaires, 3 signifie ici seulement 1 page setCurrentItem((getCurrentItem() + 1) % vues.size ()); handler.sendEmptyMessageDelayed(START_FLIPPING, 3000); // Cas de défilement retardé STOP_FLIPPING : handler.removeMessages(START_FLIPPING); break; } } }; public PageFlipper(Contexte contextuel, AttributeSet attrs) { super(contexte, attrs); ; } private void init(){setOffscreenPageLimit(1); Numéro de cache de page maximum setAdapter(adapter); // Adaptateur super.setOnPageChangeListener(listener); // Gestionnaire d'écoute.sendEmptyMessageDelayed(START_FLIPPING, 3000); // Défilement retardé} public void setViews(int[] ids){ this. new ArrayList<View>(); for(int i=0;i<ids.length+2;i++){ // Ajoute une dernière page en tête et une page d'accueil à la fin. ImageView iv = new ImageView(getContext()); iv.setImageResource(ids[i == 0 ? ids.length-1 : ( i > ids. longueur ? 0 : i-1 )]); iv.setScaleType(ImageView.ScaleType.FIT_XY); setCurrentItem(1); // Page d'accueil this.adapter.notifyDataSetChanged(); } @Override public void setOnPageChangeListener (écouteur OnPageChangeListener) { this.listener2 = écouteur;