真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android實(shí)現(xiàn)網(wǎng)易嚴(yán)選標(biāo)簽欄滑動(dòng)效果-創(chuàng)新互聯(lián)

標(biāo)簽欄是一個(gè)非常常見的控件,似乎也是一個(gè)比較簡(jiǎn)單的控件,但如果在標(biāo)簽下方加個(gè)下劃線的話,就還是可以玩出挺多花來的。

在北辰等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需定制,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),全網(wǎng)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè),北辰網(wǎng)站建設(shè)費(fèi)用合理。

網(wǎng)易嚴(yán)選的標(biāo)簽欄就做的很不錯(cuò),里面隱藏著諸多細(xì)節(jié):

  • 手動(dòng)滑動(dòng)頁面,下劃線會(huì)跟著滑動(dòng)。
  • 選擇一個(gè)標(biāo)簽后,下劃線會(huì)有滑動(dòng)過去的動(dòng)畫。
  • 選擇最左端或最右端的標(biāo)簽,標(biāo)簽欄會(huì)進(jìn)行滑動(dòng),使得標(biāo)簽向中間靠攏(如果可以滑的話)。

仔細(xì)分析下,需要在簡(jiǎn)單標(biāo)簽欄的基礎(chǔ)上實(shí)現(xiàn)以下邏輯:


  • 畫出下劃線。
  • 監(jiān)聽手動(dòng)滑動(dòng)頁面事件,實(shí)時(shí)更新下劃線位置。
  • 切換標(biāo)簽時(shí),開始下劃線滑動(dòng)的動(dòng)畫,并判斷是否要同時(shí)滑動(dòng)標(biāo)簽欄。

我做了一個(gè)樣例程序,其中的較難點(diǎn)在于計(jì)算下劃線的位置,和下劃線的動(dòng)畫效果。

// 根據(jù)當(dāng)前選定的tab,得到indicator應(yīng)該移動(dòng)到的位置 
private Pair getIndicatorTargetLeftRight(int position, float positionOffset) { 
  View tab = tabsContainer.getChildAt(position); 
  Pair indicator = getIndicatorLeftRight(tab); 
  float targetLeft = indicator.first; 
  float targetRight = indicator.second; 
  // 如果positionOffset不為0,indicator正處于兩個(gè)tab之間,需進(jìn)行加權(quán)計(jì)算得到它的位置 
  if (positionOffset > 0f && position < tabCount - 1) { 
    View nextTab = tabsContainer.getChildAt(position + 1); 
    Pair indicatorForNextTab = getIndicatorLeftRight(nextTab); 
    float left = indicatorForNextTab.first; 
    float right = indicatorForNextTab.second; 
    targetLeft = (positionOffset * left + (1f - positionOffset) * targetLeft); 
    targetRight = (positionOffset * right + (1f - positionOffset) * targetRight); 
  } 
  return new Pair<>(targetLeft, targetRight); 
} 
 
private Pair getIndicatorLeftRight(View tab) { 
  float left = tab.getLeft(); 
  float right = tab.getRight(); 
  if (indicatorMode == IndicatorMode.WRAP && tab instanceof TextView) { 
    TextView tabTextView = (TextView) tab; 
    paint.setTextSize(tabTextView.getTextSize()); 
    float textLength = paint.measureText(tabTextView.getText().toString()); 
    float middle = (left + right) / 2f; 
    left = middle - textLength / 2f; 
    right = middle + textLength / 2f; 
  } 
  return new Pair<>(left, right); 
} 

本文題目:Android實(shí)現(xiàn)網(wǎng)易嚴(yán)選標(biāo)簽欄滑動(dòng)效果-創(chuàng)新互聯(lián)
文章地址:http://weahome.cn/article/dhcpdh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部