Carrossel de fotos da página inicial
/** * Controle de rotação automática de imagem publicitária</br> * */public class ImageCycleView extends LinearLayout { /** * Context*/ private Context mContext /** * Visualização de rotação de imagem*/ private ViewPager mAdvPager = null; * * Adaptação da visualização da imagem de rolagem*/ private ImageCycleAdapter mAdvAdapter /** * Controle do indicador de rotação da imagem*/ private ViewGroup mGroup; O carrossel de imagens indica cada imagem */ private ImageView mImageView = null; ** Rolar a lista de visualização de instruções de imagem */ private ImageView[] mImageViews = null; * Se o cursor for redondo ou longo. Se for definido como 0, será longo. Se for definido como 1, será redondo. */ public int stype=1; contexto do parâmetro */ público ImageCycleView(Context context) { super(context } /** * @param context * @param attrs */ @SuppressLint("Recycle") public ImageCycleView(Context context, AttributeSet attrs) { super(context, mContext); = contexto; LayoutInflater.from(context).inflate(R.layout.ad_cycle_view, isto); (ViewPager) findViewById(R.id.adv_pager); mAdvPager.setOnPageChangeListener(new GuidePageChangeListener()); // Rola o indicador inferior direito da imagem mGroup = (ViewGroup) findViewById(R.id.viewGroup } /**). * O toque interrompe o cronômetro, o levantamento inicia o cronômetro*/ @Override public boolean dispatchTouchEvent(MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_UP){ // Inicia a rolagem da imagem startImageTimerTask(); // Interrompe a rolagem da imagem stopImageTimerTask() } return super.dispatchTouchEvent(event); } /** * Carregar dados da imagem * * @param imageUrlList * @param imageCycleViewListener */ public void setImageResources(ArrayList<Integer> imageUrlList,ImageCycleViewListener imageCycleViewListener,int stype){ this.stype=stype; // Limpar mGroup.removeAllViews(); // Número de anúncios gráficos final int imageCount = imageUrlList.size(); mImageViews = new ImageView[imageCount]; for (int i = 0; i < imageCount; i++) { mImageView = new ImageView(mContext); mImageViews[i] = mImageView; if (i == 0) { if(this.stype==1)// mImageViews[i].setBackgroundResource(R.drawable.banner_dian_focus); .cicle_banner_dian_focus);//Muda para outro 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); mAdvPager.setCurrentItem(Integer.MAX_VALUE/2); startImageTimerTask(); } public void setImageResources2(ArrayList<Integer> imageUrlList ,ImageCycleViewListener imageCycleViewListener,int stype){ this.stype=stype; Número de anúncios gráficos int final imageCount = imageUrlList.size(); mImageViews = new ImageView[imageCount]; for (int i = 0; i < imageCount; i++) { mImageView = new LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams. WRAP_CONTENT); params.leftMargin=30; mImageView.setScaleType(ScaleType.CENTER_CROP); mImageView.setLayoutParams(params[i] = mImageView; .drawable.banner_dian_focus); mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_focus);//Alterar 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); senão mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur } mGroup.addView(mImageViews[i] } mAdvAdapter = new ImageCycleAdapter(mContext, imageUrlList); ,imageCycleViewListener); mAdvPager.setAdapter(mAdvAdapter); mAdvPager.setCurrentItem(Integer.MAX_VALUE/2); startImageTimerTask(); void startImageCycle() { startImageTimerTask() } /** * Pausar carrossel - usado para economizar recursos*/ public void pushImageCycle() { stopImageTimerTask() } /** * Tarefa de rolagem de imagem*/ private void startImageTimerTask() { stopImageTimerTask(); ); } /** * Interrompe a tarefa de rolagem da imagem*/ private void stopImageTimerTask() { isStop=true; mHandler.removeCallbacks(mImageTimerTask); private Handler mHandler = new Handler(); ) { if (mImageViews! = nulo) { mAdvPager.setCurrentItem(mAdvPager.getCurrentItem()+1); if(!isStop){ //if isStop=true //Quando você sair, você precisa parar isso, caso contrário ele continuará a existir e fará um loop em segundo plano mHandler. postDelayed( mImageTimerTask, 5000); /** * Monitoramento de imagem do carrossel* * @author minking */ private classe 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 void onPageSelected(int índice) { index=index%mImageViews.length; // Define a imagem exibida atualmente // Define o indicador de rolagem da imagem de volta if(stype!=1) mImageViews[index].setBackgroundResource(R.drawable.cicle_banner_dian_focus); .setBackgroundResource(R.drawable.cicle_banner_dian_focus); mImageViews.length; i++) { if (index != i) { if(stype!=1) mImageViews[i].setBackgroundResource(R.drawable.cicle_banner_dian_blur); ; } } } } classe privada ImageCycleAdapter estende PagerAdapter { /** * Lista de cache de visualização de imagens*/ private ArrayList<SmartImageView> mImageViewCacheList /** * Lista de recursos de imagens*/ //private ArrayList<String> mAdList = new ArrayList<String>(); mAdList = new ArrayList<Integer>(); /** * Monitoramento de cliques na imagem do anúncio*/ private ImageCycleViewListener mImageCycleViewListener; private Context mContext;// public ImageCycleAdapter(Context context, ArrayList<String> adList, ImageCycleViewListener = imageCycleViewListener) {// this.mContext = context; novo ArrayList<SmartImageView>();// } public ImageCycleAdapter(Context context, ArrayList<Integer> adList , ImageCycleViewListener imageCycleViewListener) { this.mContext = context; this.mAdList = adList; ); } @Substituir public int getCount() { return Integer.MAX_VALUE } @Override public boolean isViewFromObject (View view, Object obj) { return view == obj } @Override public Object instantiateItem (ViewGroup container, final int position) { int imageUrl = mAdList; .get(posição%mAdList.size()); Log.e("imageUrl:",posição%mAdList.size()+"--"+imageUrl+""); .setLayoutParams(novo LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); //testar imageView.setScaleType(ImageView.ScaleType.CENTER_CROP } else { imageView = mImageViewCacheList.remove(0); .setImageUrl(imageUrl);imageView.setBackgroundResource(imageUrl); //Definir ouvinte de clique de imagem imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mImageCycleViewListener.onImageClick(position%mAdList.size(), v); } }); public void destroyItem (contêiner ViewGroup, posição int, objeto Object) { SmartImageView view = (SmartImageView) object; mAdvPager.removeView(view); mImageViewCacheList.add(view); } } /** * Eventos de escuta para o controle do carrossel* * @author minking */ public static interface ImageCycleViewListener { /** * Clique na imagem Evento * * @param posição * @param imageView */ public void onImageClick(int posição, Ver imagemView);
Vamos dar uma olhada em um controle de carrossel de imagens baseado no Android ViewPager
pacote 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; public class PageFlipper estende ViewPager { private String TAG = PageFlipper.class.getSimpleName(); visualizações; private PagerAdapter adaptador = new PagerAdapter() { @Override public Object instantiateItem(ViewGroup container, int position) { Ver v = views.get (posição); container.addView (v); return v } @Override public boolean isViewFromObject (View arg0, Object arg1) { return arg0 == arg1; views.indexOf (objeto); @Override public void destroyItem (contêiner ViewGroup, posição int, objeto Object) { container.removeView((View)object); @Override public int getCount() { return views == null 0 : views.size() } }; Converta a posição de controle na posição no conjunto de dados*/ public int convert(int position){ return position == 0 ? views.size()-1 : ( position > views.size() ? 0: posição-1); @Override public void onPageSelected(int position) { if(listener2 != null){ listener2.onPageSelected(convert(position)); int offset) { if(listener2 != null){ listener2.onPageScrolled(convert(posição), porcentagem, deslocamento }); if(percent == 0){ if(position == 0) // Muda para a penúltima página setCurrentItem(( views.size() - 2 ) % views.size(), false else if(position == views); .size() - 1) // Muda para a 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: // Idle if(!handler.hasMessages(START_FLIPPING)) handler.sendEmptyMessageDelayed(START_FLIPPING, 3000); SCROLL_STATE_DRAGGING: // Handler.sendEmptyMessage(STOP_FLIPPING); // Cancelar quebra de rolagem; case SCROLL_STATE_SETTLING: // Arrastar termina break; listener2; { public void handleMessage (mensagem de mensagem) { switch (msg.what) { case START_FLIPPING: if(views.size() > 3) // Como a frente e o verso são páginas auxiliares, 3 aqui significa apenas 1 página setCurrentItem((getCurrentItem() + 1) % views.size ()); handler.sendEmptyMessageDelayed(START_FLIPPING, 3000); // Quebra de rolagem atrasada case STOP_FLIPPING: handler.removeMessages(START_FLIPPING); break; } } }; public PageFlipper(contexto de contexto) { super(contexto); ; } private void init(){ setOffscreenPageLimit(1); Número máximo de cache de página setAdapter(adapter); // Adaptador super.setOnPageChangeListener(listener); // Listener handler.sendEmptyMessageDelayed(START_FLIPPING, 3000); // Rolagem atrasada} public void setViews(int[] ids){ this. new ArrayList<View>(); for(int i=0;i<ids.length+2;i++){ // Adicione uma última página no cabeçalho e uma página inicial no final. ImageView iv = new ImageView(getContext()); comprimento? 0: i-1)]); setCurrentItem(1); // Página inicial this.adapter.notifyDataSetChanged(); } @Override public void setOnPageChangeListener(OnPageChangeListener ouvinte) { this.listener2 = ouvinte;