自定义一个view

 

  1 public class AdView extends RelativeLayout {
  2 
  3 
  4 private List<String> urls;
  5 private ViewPager pager;
  6 private int currentItem = 0;
  7 private Context mContext;
  8 private LinearLayout group;
  9 private ImageView[] pointImages;  //指示pointer
 10 private ImageView pointImage;
 11 
 12 
 13 public AdView(Context context, AttributeSet attrs) {
 14 super(context, attrs);
 15 // TODO Auto-generated constructor stub
 16 this.mContext=context;
 17 LayoutInflater.from(context).inflate(R.layout.activity_ad_item,this);
 18 pager = (ViewPager) findViewById(R.id.ad_item_viewpager);
 19 
 20 }
 21 public void initAdView(List<String> urls,onAdItemClickListener adItemClickListener) {
 22 this.urls = urls;
 23 group=(LinearLayout) findViewById(R.id.point_lay);
 24 group.removeAllViews();
 25 pointImages=new ImageView[urls.size()];
 26 for(int i=0;i<urls.size();i++){
 27 pointImage=new ImageView(mContext);
 28 pointImage.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
 29 pointImage.setPadding(10, 0, 10, 0);
 30 pointImages[i]=pointImage;
 31 if(i==0){
 32 pointImages[0].setBackgroundResource(R.drawable.check_box_checked);
 33 }else{
 34 pointImages[i].setBackgroundResource(R.drawable.check_box_normal);
 35 }
 36 group.addView(pointImages[i]);
 37 }
 38 pager.setAdapter(new AdAdapter(adItemClickListener));
 39 pager.setOffscreenPageLimit(1);
 40 pager.setCurrentItem(0);
 41 startAdNext();
 42 
 43 pager.setOnTouchListener(new OnTouchListener() {
 44 
 45 @Override
 46 public boolean onTouch(View v, MotionEvent event) {
 47 // TODO Auto-generated method stub
 48 switch (event.getAction()) {
 49 case MotionEvent.ACTION_DOWN:
 50 stopAdNext();
 51 
 52 break;
 53 case MotionEvent.ACTION_UP:
 54 startAdNext();
 55 break;
 56 }
 57 
 58 return false;
 59 }
 60 });
 61 pager.setOnPageChangeListener(new OnPageChangeListener() {
 62 
 63 @Override
 64 public void onPageSelected(int index) {
 65 // TODO Auto-generated method stub
 66 currentItem=index;
 67 pointImages[index].setBackgroundResource(R.drawable.check_box_checked);
 68 for(int i=0;i<pointImages.length;i++){
 69 
 70 if(index!=i){
 71 pointImages[i].setBackgroundResource(R.drawable.check_box_normal);
 72 }
 73 }
 74 }
 75 
 76 @Override
 77 public void onPageScrolled(int arg0, float arg1, int arg2) {
 78 // TODO Auto-generated method stub
 79 
 80 }
 81 
 82 @Override
 83 public void onPageScrollStateChanged(int state) {
 84 // TODO Auto-generated method stub
 85 //System.out.println("===onPageScrollStateChanged===="+arg0);
 86 /* 
 87 * SCROLL_STATE_IDLE: pager处于空闲状态 SCROLL_STATE_DRAGGING: pager处于正在拖拽中 
 88 * SCROLL_STATE_SETTLING: pager正在自动沉降,相当于松手后,pager恢复到一个完整pager的过程 
 89 */ 
 90 if(state==ViewPager.SCROLL_STATE_IDLE){//未拖动页面
 91 startAdNext();
 92 }
 93 }
 94 });
 95 
 96 }
 97 
 98 Handler handler=new Handler();
 99 
100 private void startAdNext(){
101 
102 
103 handler.postDelayed(run, 3000);
104 
105 }
106 public void stopAdNext(){
107 handler.removeCallbacks(run);
108 }
109 
110 private Runnable run=new Runnable() {
111 
112 @Override
113 public void run() {
114 // TODO Auto-generated method stub
115 if(++currentItem==urls.size()){
116 currentItem=0;
117 }
118 pager.setCurrentItem(currentItem);
119 }
120 };
121 public interface onAdItemClickListener {
122 
123 public void onImageClick(int position, View v);
124 
125 }
126 private onAdItemClickListener onadItemClickListener;
127 
128 class AdAdapter extends PagerAdapter {
129 
130 public AdAdapter(onAdItemClickListener adItemClickListener) {
131 // TODO Auto-generated constructor stub
132 onadItemClickListener=adItemClickListener;
133 }
134 
135 @Override
136 public int getCount() {
137 // TODO Auto-generated method stub
138 return urls.size();
139 }
140 
141 @Override
142 public boolean isViewFromObject(View arg0, Object arg1) {
143 // TODO Auto-generated method stub
144 return arg0 == arg1;
145 }
146 
147 @Override
148 public void destroyItem(ViewGroup container, int position, Object object) {
149 // TODO Auto-generated method stub
150 container.removeView((View) object);
151 }
152 
153 
154 @Override
155 public Object instantiateItem(ViewGroup container, final int position) {
156 // TODO Auto-generated method stub
157 ImageView image = new ImageView(getContext());
158 image.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
159 LayoutParams.MATCH_PARENT));
160 image.setScaleType(ScaleType.FIT_XY);
161 image.setOnClickListener(new OnClickListener() {
162 
163 @Override
164 public void onClick(View v) {
165 // TODO Auto-generated method stub
166 onadItemClickListener.onImageClick(position,v);
167 }
168 });
169 ImageLoader.getInstance().displayImage(urls.get(position), image);
170 
171 container.addView(image);
172 return image;
173 }
174 
175 }
176 }




在activity中初始化即可

 

1         adView.initAdView(data,new onAdItemClickListener() {
2             
3             @Override
4             public void onImageClick(int position, View v) {
5                 // TODO Auto-generated method stub
6                 Toast.makeText(getBaseContext(), "---"+position, 0).show();
7             }
8         });

 

初始化ImagerLoader

 1         private void initImageLoader() {
 2             DisplayImageOptions options = new DisplayImageOptions.Builder()
 3                     .resetViewBeforeLoading(true)
 4                     .cacheInMemory(true)//by patrick,to avoid image flicker in listview when item reused.it is tested that it will not cost much memory use
 5                     .cacheOnDisk(true)
 6                     .imageScaleType(ImageScaleType.EXACTLY)
 7                     .bitmapConfig(Bitmap.Config.RGB_565)
 8                     .considerExifParams(true)
 9                     .displayer(new SimpleBitmapDisplayer())
10                     .build();
11 
12             ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
13                     .threadPoolSize(5) // default
14                     .threadPriority(Thread.NORM_PRIORITY - 1) // default
15                     .tasksProcessingOrder(QueueProcessingType.LIFO) // default
16                     .denyCacheImageMultipleSizesInMemory()
17                     .memoryCache(new LruMemoryCache(2 * 1024 * 1024))
18                     .memoryCacheSize(2 * 1024 * 1024)
19                     .memoryCacheSizePercentage(13) // default
20 
21                     .imageDownloader(new BaseImageDownloader(this)) // default
22                     .imageDecoder(new BaseImageDecoder(true)) // default
23                     .defaultDisplayImageOptions(options) // default
24                     .build();
25 
26             ImageLoader.getInstance().init(config);
27         }

 

 

 

posted on 2015-04-16 15:43  runleo  阅读(129)  评论(0)    收藏  举报