日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Android實(shí)現(xiàn)一個(gè)絲滑的自動(dòng)輪播控件實(shí)例代碼-創(chuàng)新互聯(lián)

前言

成都創(chuàng)新互聯(lián)公司是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開發(fā),軟件開發(fā),小程序開發(fā),十載建站對(duì)三維植被網(wǎng)等多個(gè)行業(yè),擁有豐富的網(wǎng)站維護(hù)經(jīng)驗(yàn)。

現(xiàn)在很多的 App 都有自動(dòng)輪播的 banner 界面,用于展示廣告圖片或者顯示當(dāng)前比較熱門的一些活動(dòng),除了具備比較酷炫的效果之外,通過輪播的方式來減少對(duì)界面的占用,也是很贊的一個(gè)設(shè)計(jì)點(diǎn)。本文主要是總結(jié)自動(dòng)輪播控件的實(shí)現(xiàn)過程,以及對(duì)這類控件的一些優(yōu)化的技巧。

一、如何實(shí)現(xiàn)

在開始進(jìn)行我們的代碼編程之前,我們先要思考一下,在 Google 提供的官方 Api 里面,有沒有類似的控件實(shí)現(xiàn)了相似的功能,畢竟官方的控件大都經(jīng)過了時(shí)間的考驗(yàn),無論是穩(wěn)定性還是性能方面都是非常不錯(cuò)的,如果我們能夠基于官方的控件進(jìn)行相應(yīng)的改造,控件的穩(wěn)定性也會(huì)有相對(duì)的保障。

在比較常見的主流控件里面,其實(shí) ViewPager 和 RecyclerView 已經(jīng)實(shí)現(xiàn)了類似的功能,尤其是 ViewPager,可以說是已經(jīng)實(shí)現(xiàn)了我們這個(gè)控件的大部分功能,所以如果我們基于 ViewPager 來進(jìn)行改造的話,也能讓我們的輪播控件更加穩(wěn)定。

那 ViewPager 跟我們需要的自動(dòng)輪播控件有多少差距呢,主要有兩個(gè):

  • 不支持自動(dòng)播放
  • 無法從最后一張滑動(dòng)到第一張

所以我們主要是針對(duì)這兩部分進(jìn)行相應(yīng)的改造,從而實(shí)現(xiàn)我們自己的自動(dòng)輪播控件。

1.1 實(shí)現(xiàn)自動(dòng)輪播功能

要想實(shí)現(xiàn)自動(dòng)輪播功能,我們最先想到的應(yīng)該是通過 Timer 或者 ScheduledExecutorService 來實(shí)現(xiàn)計(jì)時(shí)器的功能,然后讓 ViewPager 通過 serCurrentItem(int position) 方法,將當(dāng)前的 Item 設(shè)置為下一個(gè) position 的數(shù)據(jù),但是如果通過定時(shí)器來實(shí)現(xiàn)的話,會(huì)有一個(gè)問題,那就是我們?cè)谛枰?banner 進(jìn)行停止播放的時(shí)候就比較麻煩,所以通過 Handler 用 sendMessage 的形式,進(jìn)行事件的發(fā)送實(shí)現(xiàn) ViewPager 的自動(dòng)輪播,以及某些場(chǎng)景的停止是比較合理的。

我們來看下代碼:

 private static class AutoScrollHandler extends Handler {

 private WeakReference mBannerRef;

 private static final int MSG_CHANGE_SELECTION = 1;

 AutoScrollHandler(AutoScrollViewPager autoScrollViewPager) {
  mBannerRef = new WeakReference<>(autoScrollViewPager);
 }

 private void start() {
  removeMessages(MSG_CHANGE_SELECTION);
  sendEmptyMessageDelayed(MSG_CHANGE_SELECTION, AUTO_SCROLL_TIME);
 }

 private void stop() {
  removeMessages(MSG_CHANGE_SELECTION);
 }

 @Override
 public void handleMessage(Message msg) {
  if (msg.what == MSG_CHANGE_SELECTION) {
  if (mBannerRef == null || mBannerRef.get() == null) {
   return;
  }
  AutoScrollViewPager banner = mBannerRef.get();

  if (banner.mSelectedIndex == Integer.MAX_VALUE) {
   int rightPos = banner.mSelectedIndex % banner.mBannerList.size();
   banner.setCurrentItem(banner.getInitPosition() + rightPos + 1, true);
  } else {
   if (!hasMessages(MSG_CHANGE_SELECTION)) {
   banner.setCurrentItem(banner.mSelectedIndex + 1, true);
   sendEmptyMessageDelayed(MSG_CHANGE_SELECTION, AUTO_SCROLL_TIME);
   }
  }

  }
 }
 }

網(wǎng)站名稱:Android實(shí)現(xiàn)一個(gè)絲滑的自動(dòng)輪播控件實(shí)例代碼-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://www.dlmjj.cn/article/ejhsd.html