Android Gallery广告(仿网易)

看这篇博文前,推荐先看本博文的姊妹篇(点击即可)  

Android下拉刷新(仿网易)

完美PopupWindow(记住用户名模拟)

      Android系统提供了一个Gallery画廊控件,在项目很多时候都会用到Gallery,比如新浪首页的广告,网易看客户端首页等随处可见,今天我自己定义了一个仿网易的Gallery与大家共享。

     首先请看效果图:

                                         


代码:

package com.jefry.gallery;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * @author jefry
 *
 */
public class MyGallery extends FrameLayout {
	List<Showing> showings = new ArrayList<Showing>();
	private static final double GALLERY_IMAGE_HORIZONTAL_RATIO = 1.0;
	private static final double GALLERY_IMAGE_VERTICAL_RATIO = 1.0;
	private static final int GALLERY_SPACING = 2;
    private Context mContext;
    private PromotionImages promotionImages;
    private LinearLayout mBottomLayout;
    private TextView tips;
    private int mPcount;
    private ImageView[] icons;
	public MyGallery(Context context) {
		super(context);
	}

	public MyGallery(Context context, AttributeSet attrs) {
		super(context, attrs);
		mContext = context;
		promotionImages = new PromotionImages(context);
		LayoutParams layoutParams = new LayoutParams(android.view.ViewGroup.LayoutParams.FILL_PARENT,android.view.ViewGroup.LayoutParams.FILL_PARENT);
		layoutParams.bottomMargin = 20;
		this.addView(promotionImages, layoutParams);
		LayoutInflater inflater = ((Activity) context).getLayoutInflater();
		View indicator = inflater.inflate(R.layout.promotion_hint,null);
		this.addView(indicator);
		//
		mBottomLayout = (LinearLayout) indicator.findViewById(R.id.promotion_index_layout);
	    tips	  = (TextView) indicator.findViewById(R.id.promotion_tip);
	    initBottomIcons();
	}
	
	
	

	class PromotionImages extends Gallery {
       
		PromotionImagesAdapter promotionAdapter;
		public PromotionImages(Context context) {
			super(context);
			this.setSpacing(GALLERY_SPACING);
			promotionAdapter = new PromotionImagesAdapter(context);
			this.setAdapter(promotionAdapter);
			
			this.setOnItemSelectedListener(new OnItemSelectedListener() {
				
				public void onItemSelected(AdapterView<?> parent, View view,
						int position, long id) {
					 update(position);
				}

		
				public void onNothingSelected(AdapterView<?> parent) {
					
				}
			});
		}
		
		
		private final void update(int selected) {
		    tips.setText(showings.get(selected).getText());
			for (int i = 0; i < mPcount; i++) {
				   if (selected == i) {
						icons[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.promotion_select_focus));
					} else {
						icons[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.promotion_select_default));
				    }
			  }
		    }
		}
	
	
	   private final void initBottomIcons() {
		 mPcount = showings.size();
		 icons = new ImageView[mPcount];
		 mBottomLayout.removeAllViews();
		 mBottomLayout.setWeightSum(mPcount);
		//
		for (int i = 0; i < mPcount; i++) {
			icons[i] = new ImageView(mContext);
			if(i == 0) icons[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.promotion_select_focus));
			else icons[i].setBackgroundDrawable(getResources().getDrawable(R.drawable.promotion_select_default));
			mBottomLayout.addView(icons[i]);
		}
	}

		private final class PromotionImagesAdapter extends BaseAdapter {
			public PromotionImagesAdapter(Context context) {
				Resources res = getResources();

				Bitmap bmp = BitmapFactory.decodeResource(res,
						R.drawable.test2);
				Showing show1 = new Showing();
				show1.setBitmap(bmp);
				show1.setText("jefry_1");

				Bitmap bmp1 = BitmapFactory.decodeResource(res,
						R.drawable.test1);
				Showing show2 = new Showing();
				show2.setBitmap(bmp1);
				show2.setText("jefry_2");
                
				Bitmap bmp3 = BitmapFactory.decodeResource(res,
						R.drawable.test3);
				Showing show3 = new Showing();
				show3.setBitmap(bmp3);
				show3.setText("jefry_3");

				showings.add(show1);
				showings.add(show2);
				showings.add(show3);

			}

			
			public int getCount() {
				return showings.size();
			}

			
			public Object getItem(int position) {
				return position;
			}

			
			public long getItemId(int position) {
				return position;
			}

			
			public View getView(final int position, final View convertView,
					ViewGroup parent) {
				//System.out.println("showings = " + showings.size());
                //System.out.println("position=" + position);
				final Showing promotion = showings.get(position);
				ImageView promotionImage = (ImageView) convertView; 
				if (promotionImage == null) {
					promotionImage = new ImageView(mContext);
					System.out.println("postion=" + position + ",promotion.getBitmap()1 = "+ promotion.getBitmap());
				}
				int width = (int) (MyGallery.this.getWidth() * GALLERY_IMAGE_HORIZONTAL_RATIO);
				int height = (int) (MyGallery.this.getHeight() * GALLERY_IMAGE_VERTICAL_RATIO);
				promotionImage.setLayoutParams(new Gallery.LayoutParams(width,height));
				promotionImage.setScaleType(ImageView.ScaleType.CENTER);
				promotionImage.setScaleType(ImageView.ScaleType.FIT_XY);
				System.out.println("postion=" + position + ",promotion.getBitmap() = "+ promotion.getBitmap());
				promotionImage.setImageBitmap(promotion.getBitmap());
				return promotionImage;
			}
		}
	}

 

由于篇幅原因,我只贴出了部分代码。如果觉得上面的代码看起来比较繁琐,需要这个Demo项目源码的同志们,就留下邮箱。

评论 63
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值