1. 程式人生 > >Android 超簡單自動無限輪播圖

Android 超簡單自動無限輪播圖

ArrayList<String> Adlist = new ArrayList<>();

mBannerView.setImgUrlData(Adlist);

 mBannerView.setOnHeaderViewClickListener(new BannerView.HeaderViewClickListener() {
            @Override
            public void HeaderViewClick(int position) {

            }
        });
/**
 * android banner圖
 */
public class BannerView extends FrameLayout implements OnPageChangeListener { private Context mContext; private ViewPager mViewPager; private LinearLayout mDotLl; private List<String> mUrlList; private double heightRatio =0.5; private int duration=3000; private List<ImageView> dotList = null
; private MyAdapter mAdapter = null; private Handler mHandler = null; private AutoRollRunnable mAutoRollRunnable = null; private int prePosition = 0; private HeaderViewClickListener headerViewClickListener; public BannerView(Context context) { this(context, null); } public
BannerView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public BannerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.mContext = context; initView(); initData(); initListener(); } //初始化view private void initView() { View.inflate(mContext, R.layout.view_header, this); mViewPager = (ViewPager) findViewById(R.id.vp); mDotLl = (LinearLayout) findViewById(R.id.ll_dot); //讓banner的高度是螢幕的1/4 // ViewGroup.LayoutParams vParams = mViewPager.getLayoutParams(); // vParams.height = (int) (vParams.width * heightRatio); // mViewPager.setLayoutParams(vParams); } //初始化資料 private void initData() { dotList = new ArrayList<ImageView>(); mAutoRollRunnable = new AutoRollRunnable(); mHandler = new Handler(); mAdapter = new MyAdapter(); } private void initListener() { mViewPager.addOnPageChangeListener(this); } public void setHeightRatio(double heightRatio){ this.heightRatio=heightRatio; } /** * 設定資料 * * @param urlList */ public void setImgUrlData(List<String> urlList) { this.mUrlList = urlList; if (mUrlList != null && !mUrlList.isEmpty()) { //清空資料 dotList.clear(); mDotLl.removeAllViews(); ImageView dotIv; LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); for (int i = 0; i < mUrlList.size(); i++) { dotIv = new ImageView(mContext); if (i == 0) { dotIv.setBackgroundResource(R.mipmap.black_dot); } else { dotIv.setBackgroundResource(R.mipmap.white_dot); } //設定點的間距 params.setMargins(0, 0, DisplayUtil.dip2px(mContext, 5), 0); dotIv.setLayoutParams(params); if (mUrlList.size()>1){ //新增點到view上 mDotLl.addView(dotIv); isRoll=true; }else { isRoll=false; } //新增到集合中, 以便控制其切換 dotList.add(dotIv); } } mAdapter = new MyAdapter(); mViewPager.setAdapter(mAdapter); //設定viewpager初始位置, +10000就夠了 mViewPager.setCurrentItem(urlList.size()); startRoll(); } public boolean isRoll=false; /** * 設定點選事件 * * @param headerViewClickListener */ public void setOnHeaderViewClickListener(HeaderViewClickListener headerViewClickListener) { this.headerViewClickListener = headerViewClickListener; } //開始輪播 public void startRoll() { mAutoRollRunnable.start(); } // 停止輪播 public void stopRoll() { mAutoRollRunnable.stop(); } private class AutoRollRunnable implements Runnable { //是否在輪播的標誌 boolean isRunning = false; public void start() { if (!isRoll){ return; } if (!isRunning) { isRunning = true; mHandler.removeCallbacks(this); mHandler.postDelayed(this, duration); } } public void stop() { if (isRunning) { mHandler.removeCallbacks(this); isRunning = false; } } @Override public void run() { if (isRunning) { mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1); mHandler.postDelayed(this, duration); } } } public interface HeaderViewClickListener { void HeaderViewClick(int position); } private class MyAdapter extends PagerAdapter { //為了複用 private List<ImageView> imgCache = new ArrayList<ImageView>(); @Override public int getCount() { //無限滑動 return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object o) { return view == o; } @Override public Object instantiateItem(ViewGroup container, final int position) { ImageView iv; //獲取ImageView物件 if (imgCache.size() > 0) { iv = imgCache.remove(0); } else { iv = new ImageView(mContext); } iv.setOnTouchListener(new OnTouchListener() { private int downX = 0; private long downTime = 0; @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mAutoRollRunnable.stop(); //獲取按下的x座標 downX = (int) v.getX(); downTime = System.currentTimeMillis(); break; case MotionEvent.ACTION_UP: mAutoRollRunnable.start(); int moveX = (int) v.getX(); long moveTime = System.currentTimeMillis(); if (downX == moveX && (moveTime - downTime < 500)) {//點選的條件 //輪播圖回撥點選事件 headerViewClickListener.HeaderViewClick(position % mUrlList.size()); } break; case MotionEvent.ACTION_CANCEL: mAutoRollRunnable.start(); break; } return true; } }); //載入圖片 ImageUtils.imageLoaderBanner(iv,mUrlList.get(position % mUrlList.size())); container.addView(iv); return iv; } @Override public void destroyItem(ViewGroup container, int position, Object object) { if (object != null && object instanceof ImageView) { ImageView iv = (ImageView) object; container.removeView(iv); imgCache.add(iv); } } } @Override public void onPageSelected(int position) { dotList.get(prePosition).setBackgroundResource(R.mipmap.white_dot); dotList.get(position % dotList.size()).setBackgroundResource(R.mipmap.black_dot); prePosition = position % dotList.size(); } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } //停止輪播 @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); stopRoll(); } public void setDuration(int time){ if (time>500){ duration=time; } } }

相關推薦

Android 簡單自動無限

ArrayList<String> Adlist = new ArrayList<>(); mBannerView.setImgUrlData(Adlist); mBannerView.setOnHeaderViewClickLis

Android自動無限viewpager的使用

1、具體步驟     說下大概實現步驟,一般我們有兩種,一種是viewpager+作為遊標的點 。另外一種是重寫viewpager。       效果圖: 1.1 佈局,直接viewpager+一個viewgroup就好。<RelativeLayout xmlns:an

簡單無限

有人說iOS輪播圖很簡單,我覺得他們說的很多 本來不打算寫demo的,然而我發現我找的一些資源都不是太好,不是邏輯不夠清晰明瞭就是程式碼量多的嚇人,本來一個很簡單的東西搞得這麼複雜 那麼,來看看我的輪播圖(直接程式碼+demo) 1, ViewController.m檔案

ViewPager自動無限,手指長按停止,實現點選事件(實用版)

此Demo是自定義的viewpager,實現功能如下:無限自動輪播,pager點選事件處理,手指長按停止自動輪播,手指擡起恢復自動輪播; 幾乎可以滿足目前專案中的要求;大家可以直接使用; 整個Demo分兩大類,一個是自定義的ViewPager,一個是MainActivi

使用CollectionView實現無限(自動和手動輪)

使用UICollectionView封裝了一個無限迴圈的輪播圖,實現手動輪播和定時器自動輪播,傳入圖片陣列和標題陣列,即可實現圖片文字的輪播圖,並有點選事件,實現代理方法可實現點選事件的處理 ///呼叫 class HomeViewController: B

android無限的實現(程式碼+文章+視訊)

Android開發中無限輪播圖的實現 前面在我們的論壇裡頭看到有同學們提問,怎麼樣去實現無限輪播。所以晚上回來就錄製了視訊了! 實現方式 最簡單的方式,就是使用viewpager來實現咯! 我們一開始只是實現圖片在viewPager上面可以滑動起

工具篇——InfiniteShufflingViewPager(用於自動無限

寫程式碼的四點:     1.明確需求。要做什麼?     2.分析思路。要怎麼做?(1,2,3……)     3.確定步驟。每一個思路要用到哪些語句、方法和物件。     4.程式碼實現。用具體的語言程式碼將思路實現出來。學習新技術的四點:     1.該技術是什麼?   

Android組合控制元件(無限

android 自定義控制元件 是的,真的是自定義控制元件。 相對於自定義控制元件的控制元件是什麼呢?當然是原生的控制元件啦! 比如說: 1、Button 、TextView 、ImageView 、EditText等(view)。 2、LinearLayout

Android 無限空白問題(不是針對1張或者2張圖片的情況)

前序 大家常說,無圖言luan,今天的的確沒有截圖,主要是分享下自己在“無限輪播圖上遇到的問題”,望各位老鐵見諒 問題描述 主頁面上有四個Fragment,類似於微信上的頁面佈局,有個fragme

簡單的jq

nbsp ont har ++ htm libs com fad color 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U

自動生成小圓點

自動 分享圖片 輪播圖 alt 技術 png image bsp info 自動生成輪播圖小圓點

簡單的文字

這是一段耐人尋味的程式碼,當然了你想看就看,不想看就直接跳過。兩分鐘即可寫出文字輪播,因為這是封裝的一個js檔案,主要是使用簡單。。。。 $.fn.extend({     Scroll: function(opt, callback) {     &nb

自動無限廣告欄

自動滑動廣告欄是比較常用的功能之一,方法一是使用的是一個第三方工具AutoScrollViewPager,方法二使用的是自定義控制元件實現需要的要求. 1.AutoScrollViewPager 第三方庫,github地址: https://github.com/Trinea/an

JS寫一個最簡單的無縫

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=d

FlyBanner無限

新增依賴 dependencies { compile 'com.recker.flybanner:flybanner:1.3' } MainActivity import android.os.Bundle; import android.support.v7.app

原生js實現簡單移動端

1、程式碼部分   分為四個檔案:   slideshow.html   slideshow.css   base.js   slideshow.js 1.1、slideshow.html <!DOCTYPE html> <html lang="en"&g

微信小程式 之 “簡單自作

微信小程式輪播圖的是通過元件swiper來實現的 swiper 又叫 滑塊檢視容器 很多時候,我們只做頁面的時候都會用到圖片的輪播效果,剛開始接觸的時候也不會弄,所以直接進入主題,製作一個超簡單粗暴的輪播圖試試。 1. 新建一個專案,在所以需要新增輪播圖的介面(.wxm

Android TV利用viewPager實現,並通過handler進行邏輯控制

    公司要求實現一個輪播圖,滾動圖片及其對應文字。共有五張圖,包含小圓點。     最初的實現是參考了https://blog.csdn.net/zhaoxiaojian1213/article/details/78280132,使用ViewPager實現,新開一個執行

Banner和ImageLoder無限(精簡版)

1.首先先在程式中匯入我們要使的依賴 implementation 'com.youth.banner:banner:1.4.9' implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

無限

1.Applation設定全域性(記得在清單檔案中註冊) public class App extends Application { @Override public void onCreate() { super.onCreate();