国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - java制作廣告圖片自動輪播控件

java制作廣告圖片自動輪播控件

2020-01-13 16:59hebedich JAVA教程

本文給大家分享了2款java實現(xiàn)的首頁廣告圖片自動輪播的控件,分別是PC端和移動端的,效果非常不錯,有需要的小伙伴可以參考下。

首頁圖片的輪播

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
/**
 * 廣告圖片自動輪播控件</br>
 *
 */
public class ImageCycleView extends LinearLayout {
  /**
   * 上下文
   */
  private Context mContext;
  /**
   * 圖片輪播視圖
   */
  private ViewPager mAdvPager = null;
  /**
   * 滾動圖片視圖適配
   */
  private ImageCycleAdapter mAdvAdapter;
  /**
   * 圖片輪播指示器控件
   */
  private ViewGroup mGroup;
 
  /**
   * 圖片輪播指示個圖
   */
  private ImageView mImageView = null;
 
  /**
   * 滾動圖片指示視圖列表
   */
  private ImageView[] mImageViews = null;
 
  /**
   * 圖片滾動當(dāng)前圖片下標(biāo)
   */
 
  private boolean isStop;
 
  /**
   * 游標(biāo)是圓形還是長條,要是設(shè)置為0是長條,要是1就是圓形 默認(rèn)是圓形
   */
  public int stype=1;
 
  /**
   * @param context
   */
  public ImageCycleView(Context context) {
    super(context);
  }
 
  /**
   * @param context
   * @param attrs
   */
  @SuppressLint("Recycle")
  public ImageCycleView(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    LayoutInflater.from(context).inflate(R.layout.ad_cycle_view, this);
    mAdvPager = (ViewPager) findViewById(R.id.adv_pager);
    mAdvPager.setOnPageChangeListener(new GuidePageChangeListener());
    // 滾動圖片右下指示器視
    mGroup = (ViewGroup) findViewById(R.id.viewGroup);  
  }
 
  /**
   * 觸摸停止計時器,抬起啟動計時器
   */
  @Override
  public boolean dispatchTouchEvent(MotionEvent event) {
    if(event.getAction()==MotionEvent.ACTION_UP){
      // 開始圖片滾動
      startImageTimerTask();
    }else{
      // 停止圖片滾動
      stopImageTimerTask();
    }
    return super.dispatchTouchEvent(event);
  }
  /**
   * 裝填圖片數(shù)據(jù)
   *
   * @param imageUrlList
   * @param imageCycleViewListener
   */
  public void setImageResources(ArrayList<Integer> imageUrlList ,ImageCycleViewListener imageCycleViewListener,int stype){
    this.stype=stype;
    // 清除
    mGroup.removeAllViews();
    // 圖片廣告數(shù)量
    final int imageCount = imageUrlList.size();
    mImageViews = new ImageView[imageCount];
    for (int i = 0; i < imageCount; i++) {
      mImageView = new ImageView(mContext);
      LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.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);//換點
        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]);
    }
 
    mAdvAdapter = new ImageCycleAdapter(mContext, imageUrlList ,imageCycleViewListener);
    mAdvPager.setAdapter(mAdvAdapter);
    mAdvPager.setCurrentItem(Integer.MAX_VALUE/2);
    startImageTimerTask();
  }
   
   
  public void setImageResources2(ArrayList<Integer> imageUrlList ,ImageCycleViewListener imageCycleViewListener,int stype){
    this.stype=stype;
    // 清除
    mGroup.removeAllViews();
    // 圖片廣告數(shù)量
    final int imageCount = imageUrlList.size();
    mImageViews = new ImageView[imageCount];
    for (int i = 0; i < imageCount; i++) {
      mImageView = new ImageView(mContext);
      LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.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);//換點
        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]);
    }
 
    mAdvAdapter = new ImageCycleAdapter(mContext, imageUrlList ,imageCycleViewListener);
    mAdvPager.setAdapter(mAdvAdapter);
    mAdvPager.setCurrentItem(Integer.MAX_VALUE/2);
    startImageTimerTask();
  }
   
 
  /**
   * 圖片輪播(手動控制自動輪播與否,便于資源控件)
   */
  public void startImageCycle() {
    startImageTimerTask();
  }
 
  /**
   * 暫停輪播—用于節(jié)省資源
   */
  public void pushImageCycle() {
    stopImageTimerTask();
  }
 
  /**
   * 圖片滾動任務(wù)
   */
  private void startImageTimerTask() {
    stopImageTimerTask();
    // 圖片滾動
    mHandler.postDelayed(mImageTimerTask, 5000);
  }
 
  /**
   * 停止圖片滾動任務(wù)
   */
  private void stopImageTimerTask() {
    isStop=true;
    mHandler.removeCallbacks(mImageTimerTask);
  }
 
  private Handler mHandler = new Handler();
 
  /**
   * 圖片自動輪播Task
   */
  private Runnable mImageTimerTask = new Runnable() {
    @Override
    public void run() {
      if (mImageViews != null) {
        mAdvPager.setCurrentItem(mAdvPager.getCurrentItem()+1);
        if(!isStop){ //if isStop=true  //當(dāng)你退出后 要把這個給停下來 不然 這個一直存在 就一直在后臺循環(huán)
          mHandler.postDelayed(mImageTimerTask, 5000);
        }
 
      }
    }
  };
 
  /**
   * 輪播圖片監(jiān)聽
   *
   * @author minking
   */
  private final class GuidePageChangeListener implements 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 index) {
      index=index%mImageViews.length;
      // 設(shè)置當(dāng)前顯示的圖片
      // 設(shè)置圖片滾動指示器背
      if(stype!=1)
        mImageViews[index].setBackgroundResource(R.drawable.cicle_banner_dian_focus);
      else
        mImageViews[index].setBackgroundResource(R.drawable.cicle_banner_dian_focus);
      for (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);
        }
      }
    }
  }
 
  private class ImageCycleAdapter extends PagerAdapter {
 
    /**
     * 圖片視圖緩存列表
     */
    private ArrayList<SmartImageView> mImageViewCacheList;
 
    /**
     * 圖片資源列表
     */
    //private ArrayList<String> mAdList = new ArrayList<String>();
    private ArrayList<Integer> mAdList = new ArrayList<Integer>();
 
    /**
     * 廣告圖片點擊監(jiān)聽
     */
    private ImageCycleViewListener mImageCycleViewListener;
 
    private Context mContext;
//   public ImageCycleAdapter(Context context, ArrayList<String> adList , ImageCycleViewListener imageCycleViewListener) {
//     this.mContext = context;
//     this.mAdList = adList;
//     mImageCycleViewListener = imageCycleViewListener;
//     mImageViewCacheList = new ArrayList<SmartImageView>();
//   }
    public ImageCycleAdapter(Context context, ArrayList<Integer> adList , ImageCycleViewListener imageCycleViewListener) {
      this.mContext = context;
      this.mAdList = adList;
      mImageCycleViewListener = imageCycleViewListener;
      mImageViewCacheList = new ArrayList<SmartImageView>();
    }
 
    @Override
    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(position%mAdList.size());
      Log.e("imageUrl:",position%mAdList.size()+"--"+imageUrl+"");
      SmartImageView imageView = null;
      if (mImageViewCacheList.isEmpty()) {
        imageView = new SmartImageView(mContext);
        imageView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
 
        //test
        imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
         
      }
      else {
        imageView = mImageViewCacheList.remove(0);
      }
      imageView.setTag(imageUrl);
      container.addView(imageView);
      //imageView.setImageUrl(imageUrl);
      imageView.setBackgroundResource(imageUrl);
      // 設(shè)置圖片點擊監(jiān)聽
      imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
          mImageCycleViewListener.onImageClick(position%mAdList.size(), v);
        }
      });
      return imageView;
    }
 
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
      SmartImageView view = (SmartImageView) object;
      mAdvPager.removeView(view);
      mImageViewCacheList.add(view);
 
    }
 
  }
 
  /**
   * 輪播控件的監(jiān)聽事件
   *
   * @author minking
   */
  public static interface ImageCycleViewListener {
 
    /**
     * 單擊圖片事件
     *
     * @param position
     * @param imageView
     */
    public void onImageClick(int position, View imageView);
  }
 
}

我們再來看個基于安卓ViewPager的圖片輪播控件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
package me.lanfog.myandroid.widget;
 
import java.util.ArrayList;
import java.util.List;
 
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
 
public class PageFlipper extends ViewPager {
 
  private String TAG = PageFlipper.class.getSimpleName();
   
  private List<View> views;
  private PagerAdapter adapter = new PagerAdapter() {
     
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
      View v = views.get(position);
      container.addView(v);
      return v;
    }
     
    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
      return arg0 == arg1;
    }
     
    @Override
    public int getItemPosition(Object object) {
      return views.indexOf(object);
    }
     
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
      container.removeView((View)object);
    }
     
    @Override
    public int getCount() {
      return views == null ? 0 : views.size();
    }
  };
  private OnPageChangeListener listener = new OnPageChangeListener() {
     
    /**
     * 將控件位置轉(zhuǎn)化為數(shù)據(jù)集中的位置
     */
    public int convert(int position){
      return position == 0 ? views.size()-1 : ( position > views.size() ? 0 : position-1 );
    }
     
    @Override
    public void onPageSelected(int position) {
      if(listener2 != null){
        listener2.onPageSelected(convert(position));
      }
    }
     
    @Override
    public void onPageScrolled(int position, float percent, int offset) {
      if(listener2 != null){
        listener2.onPageScrolled(convert(position), percent, offset);
      }
       
      if(percent == 0){
        if(position == 0) // 切換到倒數(shù)第二頁
          setCurrentItem(( views.size() - 2 ) % views.size(), false);
        else if(position == views.size() - 1) // 切換到正數(shù)第二頁
          setCurrentItem(1, false);
      }
    }
     
    @Override
    public void onPageScrollStateChanged(int state) {
      if(listener2 != null){
        listener2.onPageScrollStateChanged(state);
      }
       
      switch (state) {
      case SCROLL_STATE_IDLE: // 閑置
         
        if(!handler.hasMessages(START_FLIPPING))
          handler.sendEmptyMessageDelayed(START_FLIPPING, 3000); // 延時滾動
           
        break;
      case SCROLL_STATE_DRAGGING: // 拖動中
 
        handler.sendEmptyMessage(STOP_FLIPPING); // 取消滾動
         
        break;
      case SCROLL_STATE_SETTLING: // 拖動結(jié)束
        break;
      }
    }
  }, listener2;
   
  private final int START_FLIPPING = 0;
  private final int STOP_FLIPPING = 1;
   
  private Handler handler = new Handler(){
     
    public void handleMessage(Message msg) {
       
      switch (msg.what) {
      case START_FLIPPING:
         
        if(views.size() > 3) // 因為前后頁是輔助頁,所以此處3也就是只有1頁
          setCurrentItem((getCurrentItem() + 1) % views.size());
         
        handler.sendEmptyMessageDelayed(START_FLIPPING, 3000); // 延時滾動
         
        break;
      case STOP_FLIPPING:
         
        handler.removeMessages(START_FLIPPING);
         
        break;
      }
    }
  };
   
  public PageFlipper(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
  }
 
  public PageFlipper(Context context) {
    super(context);
    init();
  }
 
  private void init(){
     
    setOffscreenPageLimit(1); // 最大頁面緩存數(shù)量
    setAdapter(adapter); // 適配器
    super.setOnPageChangeListener(listener); // 監(jiān)聽器
 
    handler.sendEmptyMessageDelayed(START_FLIPPING, 3000); // 延時滾動
  }
   
  public void setViews(int[] ids){
    this.views = new ArrayList<View>();
    for(int i=0;i<ids.length+2;i++){ // 頭部新增一個尾頁,尾部新增一個首頁
       
      ImageView iv = new ImageView(getContext());
      iv.setImageResource(ids[i == 0 ? ids.length-1 : ( i > ids.length ? 0 : i-1 )]);
      iv.setScaleType(ImageView.ScaleType.FIT_XY);
      this.views.add(iv);
    }
    setCurrentItem(1); // 首頁
    this.adapter.notifyDataSetChanged();
  }
   
  @Override
  public void setOnPageChangeListener(OnPageChangeListener listener) {
    this.listener2 = listener;
  }
   
}

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久综合激情 | 午夜羞羞视频 | 黄色a站| 美国成人在线 | 国产在线小视频 | 日韩高清在线 | 九九九久久国产免费 | 精品一二三区 | 日韩欧美在线观看视频 | 亚洲激情在线视频 | 日本久久久 | 久草中文在线观看 | 亚洲精品国产综合99久久夜夜嗨 | 亚洲生活片 | 国产精品视频一二三区 | 国产精品亚洲一区二区三区 | 久久久久久久久一区二区三区 | 国产毛片一区二区 | 国产区在线| 毛片免费观看视频 | 亚洲精品字幕 | 日韩精品小视频 | 级毛片| 日韩高清在线 | 国产精品成人在线观看 | 国产一区二区三区免费看 | 欧美成人高清视频 | 精品久久久久久久久久久久久久 | 久久久天堂国产精品 | 久久99久久99精品免观看粉嫩 | 最近韩国日本免费观看mv免费版 | 精品久久精品 | 视频在线一区二区三区 | 中文字幕在线观看 | 精品国产一级毛片 | 秋霞特色aa大片 | 欧美日韩一区在线 | 精品国产乱码久久久久久88av | 亚洲视频综合 | 午夜高清视频 | 欧美成人一区二区三区片免费 |