国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

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

2019-11-26 14:53:55
字體:
供稿:網(wǎng)友

首頁圖片的輪播

/** * 廣告圖片自動輪播控件</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的圖片輪播控件

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;  }   }

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 晴隆县| 东乡县| 枞阳县| 东明县| 淮安市| 尉犁县| 中西区| 美姑县| 沂南县| 满洲里市| 道孚县| 南昌市| 长寿区| 思南县| 石河子市| 阿勒泰市| 孝义市| 丘北县| 元谋县| 新宾| 礼泉县| 阜城县| 利津县| 红桥区| 奉节县| 达尔| 恩平市| 宝丰县| 惠东县| 额济纳旗| 卓尼县| 甘洛县| 新巴尔虎左旗| 东明县| 绥化市| 饶河县| 宜城市| 札达县| 那曲县| 禹城市| 陆河县|