Android圖片無限輪播的實現代碼_Android

來源:互聯網
上載者:User

本文執行個體為大家分享了AnAndroid圖片無限輪播的具體代碼,供大家參考,具體內容如下

public class MainActivity extends Activity {  private ViewPager viewPager;  private LinearLayout ll_dot;   private String[] imageUrls = new String[] {  "yun_qi_img/block.gif",   "yun_qi_img/block.gif",   "yun_qi_img/57.jpg",  "yun_qi_img/block.gif",  "yun_qi_img/300218769736132194086202411_950.jpg" };  //private String[] imageUrls = new String[] {      //"yun_qi_img/ab.jpg",      //"yun_qi_img/ae.jpg",      //"yun_qi_img/af.jpg",      //"yun_qi_img/ah.jpg" };  private ArrayList<ImageView> viewList;  private ArrayList<ImageView> dotList;  Handler handler = new Handler() {    public void handleMessage(android.os.Message msg) {      // 先去擷取到當前條目索引      int currentItem = viewPager.getCurrentItem();      // 條目索引+1      currentItem++;      // 重新設定給viewPager      viewPager.setCurrentItem(currentItem);      // 再調用發延時訊息的方法      sendDelayMessage();    };  };  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    viewPager = (ViewPager) findViewById(R.id.viewPager);    ll_dot = (LinearLayout) findViewById(R.id.ll_dot);    // 初始化圖片    initViewList();    // 初始化小圓點    initDots();    // 設定資料配接器    viewPager.setAdapter(new MyPagerAdapter(this, viewList, handler));    // 設定初始的展示條目    viewPager.setCurrentItem(viewList.size() * 100000);    // 設定延時切換    sendDelayMessage();    // 監聽viewPager的一個滑動事件    viewPager.setOnPageChangeListener(new OnPageChangeListener() {      @Override      public void onPageSelected(int position) {        // 遍曆小點的集合        for (int i = 0; i < dotList.size(); i++) {          // 如果當前的索引值和i相等          if (position % dotList.size() == i) {            // 設定小點為亮色            dotList.get(i).setImageResource(R.drawable.dot_focuse);          } else {            // 否則暗色            dotList.get(i).setImageResource(R.drawable.dot_normal);          }        }      }      @Override      public void onPageScrolled(int arg0, float arg1, int arg2) {      }      @Override      public void onPageScrollStateChanged(int arg0) {      }    });  }  /**   * 發送延時訊息   */  private void sendDelayMessage() {    handler.sendEmptyMessageDelayed(0, 2000);  }  private void initDots() {    // 建立一個裝小點控制項的集合    dotList = new ArrayList<ImageView>();    dotList.clear();    for (int i = 0; i < imageUrls.length; i++) {      ImageView imageView = new ImageView(this);      if (i == 0) {        // 如果是第一張,預設給一個亮的小點        imageView.setImageResource(R.drawable.dot_focuse);      } else {        // 如果不是滴一個,預設給一個暗的小點        imageView.setImageResource(R.drawable.dot_normal);      }      // 設定小點的預設寬高為20dp      LayoutParams params = new LayoutParams(20, 20);      // 設定小點的間距      params.setMargins(5, 0, 5, 0);      ll_dot.addView(imageView, params);      // 往小點集合中添加view      dotList.add(imageView);    }  }  private void initViewList() {    // 先使用xutils的工具類    BitmapUtils bitmapUtils = new BitmapUtils(this);    viewList = new ArrayList<ImageView>();    for (int i = 0; i < imageUrls.length; i++) {      // 建立imageView 並通過工具類將圖片設定到控制項上      ImageView imageView = new ImageView(this);      bitmapUtils.display(imageView, imageUrls[i]);      viewList.add(imageView);    }  }}

適配器

public class MyPagerAdapter extends PagerAdapter {  private List<ImageView> viewList;  private Context context;  private Handler handler;  public MyPagerAdapter(Context context, List<ImageView> viewList,      Handler handler) {    this.context = context;    this.viewList = viewList;    this.handler = handler;  }  @Override  public int getCount() {    return Integer.MAX_VALUE;  }  @Override  public boolean isViewFromObject(View arg0, Object arg1) {    return arg0 == arg1;  }  @Override  public Object instantiateItem(ViewGroup container, int position) {    // 通過控制項集合擷取imageView 添加到容器中,並作為key 返回    ImageView imageView = viewList.get(position % viewList.size());    imageView.setOnTouchListener(new OnTouchListener() {      @Override      public boolean onTouch(View v, MotionEvent event) {        switch (event.getAction()) {        // 當按下的時候,停止輪播        case MotionEvent.ACTION_DOWN:          // 移除所有的回調和訊息          handler.removeCallbacksAndMessages(null);          break;        // 抬起        case MotionEvent.ACTION_UP:          handler.sendEmptyMessageDelayed(0, 2000);          break;        // 取消的時候,繼續開始錄播        case MotionEvent.ACTION_CANCEL:          handler.sendEmptyMessageDelayed(0, 2000);          break;        default:          break;        }        //觸摸事件不被消費,true 消費該觸摸事件        return true;      }    });    container.addView(imageView);    return imageView;  }  @Override  public void destroyItem(ViewGroup container, int position, Object object) {    // super.destroyItem(container, position, object);    container.removeView((View) object);  }}

以上就是本文的全部內容,希望對大家的學習有所協助,也希望大家多多支援雲棲社區。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.