Carrusel de imágenes de la página de inicio.
/** * Control de rotación automática para imágenes publicitarias</br> * */public class ImageCycleView extends LinearLayout { /** * Context*/ private Context mContext /** * Vista de rotación de imágenes*/ private ViewPager mAdvPager = null; ** * Adaptación de vista de imagen de desplazamiento*/ Private ImageCycleAdapter mAdvAdapter /** * Control del indicador de rotación de imagen*/ Private ViewGroup mGroup; El carrusel de imágenes indica cada imagen */ private ImageView mImageView = null /** * Desplazar la lista de visualización de instrucciones de imagen */ private ImageView[] mImageViews = null /** * Subíndice de imagen actual de desplazamiento */ private boolean isStop; * Si el cursor es circular o largo. Si se establece en 0, será largo. Si se establece en 1, será circular. El valor predeterminado es circular */ public int stype=1; contexto del parámetro */ público ImageCycleView(Contexto contexto) { super(contexto } /** * @param contexto * @param atributos */ @SuppressLint("Recycle") public ImageCycleView(Contexto contexto, AttributeSet atributos) { super(contexto, atributos mContext); = contexto; LayoutInflater.from(context).inflate(R.layout.ad_cycle_view, esto); (ViewPager) findViewById(R.id.adv_pager); mAdvPager.setOnPageChangeListener(new GuidePageChangeListener()); // Desplazarse por el indicador inferior derecho de la imagen mGroup = (ViewGroup) findViewById(R.id.viewGroup); * Toque detiene el cronómetro, el elevador inicia el cronómetro*/ @Override public boolean despachoTouchEvent(MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_UP){ // Iniciar el desplazamiento de la imagen startImageTimerTask(); }else{ // Detener el desplazamiento de la imagen stopImageTimerTask() } return super.dispatchTouchEvent(event); } /** * Cargar datos de imagen * * @param imageUrlList * @param imageCycleViewListener */ public void setImageResources(ArrayList<Integer> imageUrlList,ImageCycleViewListener imageCycleViewListener,int stype){ this.stype=stype; // Borrar mGroup.removeAllViews() // Número de anuncios gráficos final int imageCount = imageUrlList.size(); mImageViews = nuevo ImageView[imageCount]; para (int i = 0; i < imageCount; i++) { mImageView = new ImageView(mContext); LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT; mImageView.setScaleType(ScaleType.CENTER_CROP); 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);//Cambiar a otra cosa 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); mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur); } mGroup.addView(mImageViews[i]); mAdvPager.setAdapter(mAdvAdapter); mAdvPager.setCurrentItem(Integer.MAX_VALUE/2); startImageTimerTask(); } public void setImageResources2(ArrayList<Integer> imageUrlList ,ImageCycleViewListener imageCycleViewListener,int stype){ this.stype=stype; Número de anuncios gráficos int final imageCount = imageUrlList.size(); mImageViews = nuevo ImageView[imageCount]; para (int i = 0; i < imageCount; i++) { mImageView = nuevo ImageView(mContext params=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams). WRAP_CONTENT); parámetros.leftMargin=30; mImageView.setScaleType(ScaleType.CENTER_CROP); mImageView.setLayoutParams(params); mImageViews[i] = mImageView; .drawable.banner_dian_focus); mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_focus);//Cambiar más 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(); */ carrusel de imágenes (control manual del carrusel automático, conveniente para el control de recursos) void startImageCycle() { startImageTimerTask() } /** * Carrusel de pausa: se utiliza para ahorrar recursos*/ public void pushImageCycle() { stopImageTimerTask(); /** * Tarea de desplazamiento de imágenes*/ private void startImageTimerTask() { stopImageTimerTask() // Desplazamiento de imágenes mHandler.postDelayed(mImageTimerTask, 5000); } /** * Detener la tarea de desplazamiento de imágenes*/ private void stopImageTimerTask() { isStop=true; mHandler.removeCallbacks(mImageTimerTask); } controlador privado mHandler = new Handler() /** * Tarea de rotación automática de imágenes */ privado Runnable mImageTimerTask = new Runnable() { @Override public void run ( ) { si (mImageViews! = nulo) { mAdvPager.setCurrentItem(mAdvPager.getCurrentItem()+1); if(!isStop){ //if isStop=true //Cuando salga, debe detener esto; de lo contrario, continuará existiendo y se repetirá en segundo plano en mHandler. postDelayed( mImageTimerTask, 5000); } } } } /** * Monitoreo de imágenes en carrusel* * @author minking */ privado clase final GuidePageChangeListener implementa 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; anular onPageSelected (índice int) { index=index%mImageViews.length; // Establece la imagen mostrada actualmente // Vuelve a configurar el indicador de desplazamiento de la imagen if(stype!=1) mImageViews[index].setBackgroundResource(R.drawable.cicle_banner_dian_focus); .setBackgroundResource(R.drawable.cicle_banner_dian_focus) para (int i = 0; i <); mImageViews.length; i++) { if (index != i) { if(stype!=1) mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur); else mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur) } } } } clase privada ImageCycleAdapter se extiende PagerAdapter { /** * Lista de caché de vista de imágenes*/ private ArrayList<SmartImageView> mImageViewCacheList /** * Lista de recursos de imágenes*/ //private ArrayList<String> mAdList = new ArrayList<String>() private ArrayList<Integer>; mAdList = new ArrayList<Integer>() /** * Monitoreo de clics en imágenes de anuncios*/ private ImageCycleViewListener mImageCycleViewListener; contexto privado mContext;// ImageCycleAdapter público (contexto de contexto, ArrayList<String> adList, ImageCycleViewListener imageCycleViewListener) {// this.mContext = contexto; // this.mAdList = adList; nuevo ArrayList<SmartImageView>();// } public ImageCycleAdapter(Contexto de contexto, ArrayList<Integer> adList, ImageCycleViewListener imageCycleViewListener) { this.mContext = contexto; this.mAdList = mImageCycleViewListener = imageCycleViewListener = new ArrayList<SmartImageView>( ); } @Anular public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(Ver vista, Objeto obj) { return vista == obj } @Override public Object instantiateItem(Contenedor ViewGroup, posición final int) { int imageUrl = mAdList; .get(posición%mAdList.size()); Log.e("imageUrl:",position%mAdList.size()+"--"+imageUrl+""); SmartImageView imageView = null; if (mImageViewCacheList.isEmpty()) { imageView = new SmartImageView(mContext); .setLayoutParams(nuevo LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); //prueba imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); } else { imageView = mImageViewCacheList.remove(0 } imageView.setTag(imageUrl); .setImageUrl(imageUrl); imageView.setBackgroundResource(imageUrl); //Establecer escucha de clics en la imagen imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mImageCycleViewListener.onImageClick(position%mAdList.size(), v); } }); public void destroyItem (contenedor ViewGroup, posición int, objeto objeto) { vista SmartImageView = (SmartImageView) objeto; mAdvPager.removeView(view); mImageViewCacheList.add(view); } } /** * Eventos de escucha para el control del carrusel* * @author minking */ interfaz estática pública ImageCycleViewListener { /** * Haga clic en la imagen Evento * * @param position * @param imageView */ public void onImageClick(int position, Ver imageView);
Echemos un vistazo a un control de carrusel de imágenes basado en Android ViewPager
empaquetar me.lanfog.myandroid.widget; importar java.util.ArrayList; importar java.util.List; importar android.content.Context; importar android.os.Handler; importar android.os.Message; importar android.support.v4 .view.PagerAdapter;importar android.support.v4.view.ViewPager;importar android.util.AttributeSet;importar android.util.Log;importar android.view.View;importar android.view.ViewGroup;importar android.widget.ImageView; clase pública PageFlipper extiende ViewPager {privado String TAG = PageFlipper.class.getSimpleName(); vistas; adaptador PagerAdapter privado = nuevo PagerAdapter() { @Override objeto público instanciateItem (contenedor ViewGroup, posición int) { Ver v = vistas.get(posición); contenedor.addView(v); retorno v } @Override public boolean isViewFromObject(Ver arg0, Objeto arg1) { return arg0 == arg1; views.indexOf(objeto); } @Override public void destroyItem(Contenedor ViewGroup, posición int, objeto Objeto) { contenedor.removeView((Ver)objeto); } @Override public int getCount() { return vistas == nulo ? vistas.size() } }; Convertir la posición de control a la posición en el conjunto de datos*/ public int convert(int position){ return position == 0 ? views.size()-1 : ( position > views.size() ? 0: posición-1); } @Override public void onPageSelected(int posición) { if(listener2!= null){ listener2.onPageSelected(convert(position)); @Override public void onPageScrolled(int posición, porcentaje flotante, int offset) { if(listener2!= null){ escucha2.onPageScrolled(convert(posición), porcentaje, offset } if(percent == 0){ if(position == 0) // Cambia a la penúltima página setCurrentItem(( views.size() - 2 ) % views.size(), false else if(position == views); .size() - 1) // Cambia a la segunda página positiva setCurrentItem(1, false } } @Override public void onPageScrollStateChanged(int state) { if(listener2); != null){ listener2.onPageScrollStateChanged(state); } switch (state) { case SCROLL_STATE_IDLE: // Inactivo if(!handler.hasMessages(START_FLIPPING)) handler.sendEmptyMessageDelayed(START_FLIPPING, 3000); SCROLL_STATE_DRAGGING: // handler.sendEmptyMessage(STOP_FLIPPING); // Cancelar pausa de desplazamiento; case SCROLL_STATE_SETTLING: // El arrastre finaliza; handler privado = new Handler(); { public void handleMessage (mensaje de mensaje) { cambiar (msg.what) { case START_FLIPPING: if(views.size() > 3) // Debido a que las páginas frontal y posterior son páginas auxiliares, 3 aquí significa solo 1 página setCurrentItem((getCurrentItem() + 1) % views.size ()); handler.sendEmptyMessageDelayed(START_FLIPPING, 3000); // pausa de desplazamiento retrasada; handler.removeMessages(START_FLIPPING); break; } } }; PageFlipper público (contexto de contexto) { super(contexto, atributos()); ; } privado vacío init(){ setOffscreenPageLimit(1); Número máximo de caché de página setAdapter(adapter); // Adaptador super.setOnPageChangeListener(listener); // Oyente handler.sendEmptyMessageDelayed(START_FLIPPING, 3000); // Desplazamiento retrasado} public void setViews(int[] ids){ this. nueva ArrayList<Ver>(); para(int i=0;i<ids.length+2;i++){ // Agrega una última página al principio y una página de inicio al final. ImageView iv = new ImageView(getContext()); iv.setImageResource(ids[i == 0 ? ids.length-1 : ( i > ids. longitud 0: i-1)]); iv.setScaleType(ImageView.ScaleType.FIT_XY); setCurrentItem(1); // Página de inicio this.adapter.notifyDataSetChanged(); } @Override public void setOnPageChangeListener(OnPageChangeListener oyente) { this.listener2 = oyente;