最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android開發(fā)之ProgressBar字體隨著進度條的加載而滾動

 更新時間:2017年09月08日 09:54:55   作者:四級五次郎  
這篇文章主要介紹了Android開發(fā)之ProgressBar字體隨著進度條的加載而滾動,需要的朋友可以參考下

在網(wǎng)上翻閱了很多關(guān)于ProgressBar滾動效果,但是始終沒有找到適合項目中的這種效果,故自己寫這篇文章,記錄一下寫作過程,給大家做一個參考。先看下最終效果效果圖

我這里用的是LICEcap軟件錄制的gif圖,效果有點掉幀,哪位仁兄有比較好的錄制gif的軟件煩請相告,小弟在此先行謝過。

首先看下xml代碼,只有兩個系統(tǒng)控件,一個TextView和一個ProgressBar,Button只是為了方便觸發(fā)進度條的效果,實際項目中可以根據(jù)需求來做。首先看下xml中的代碼:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@+id/activity_main"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical"
 android:layout_margin="5dp">
 <TextView
  android:layout_marginTop="50dp"
  android:id="@+id/progress_precent"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="0%"
  android:textColor="#ff00"
  android:textSize="12sp"
  android:padding="3dp"/>
 <ProgressBar
  android:id="@+id/pb_progressbar"
  style="?android:attr/progressBarStyleHorizontal"
  android:layout_width="match_parent"
  android:layout_height="5dp"
  android:max="100"
  android:progress="0"
  android:progressDrawable="@drawable/progressbar_color" />
 <Button
  android:id="@+id/btn_start"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_marginTop="30dp"
  android:text="start" />
</LinearLayout>

樣式:progressbar_color.xml

<?xml version="1.0" encoding="utf-8"?>
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
 <!-- 背景 gradient是漸變,corners定義的是圓角 -->
 <item android:id="@android:id/background">
  <shape>
   <corners android:radius="5dp" />
   <solid android:color="#9a9a9a" />
  </shape>
 </item>
 <!-- 進度條 -->
 <item android:id="@android:id/progress">
  <clip>
   <shape>
    <corners android:radius="5dp" />
    <solid android:color="#E14f50" />
   </shape>
  </clip>
 </item>
 </layer-list>

在onCreate()方法中得到控件的寬度,代碼如下:

 // 得到progressBar控件的寬度
  ViewTreeObserver vto2 = pbProgressbar.getViewTreeObserver();
  vto2.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
   @Override
   public void onGlobalLayout() {
    pbProgressbar.getViewTreeObserver().removeGlobalOnLayoutListener(this);
    width = pbProgressbar.getWidth();
    Log.i("TAG", "MainActivity onCreate()=="+pbProgressbar.getWidth());
   }
  });

先說下具體實現(xiàn)思路,再貼上最終代碼

實現(xiàn)思路是我們需要ProgressBar達(dá)到最大值時,TextView的位置移動到最遠(yuǎn)處。要想得到progressBar的任意百分比可以移動到對應(yīng)百分比的位置,咱們就需要知道每一個百分比移動的距離。說的還不夠明白的話咱們看看下面的公式,可以更好的理解。

    // 進度條的最小單位,默認(rèn)是1,你也可以是其他數(shù)值,我在demo中為了方便使用了1:

    進度條的最小單位 / 進度條的最大值 = 每一個百分比移動的距離/總的距離(控件的總寬度)

    可以推導(dǎo)出:

    每一個百分比要移動距離 = (進度條的最小單位 / 進度條的最大值)*總的距離(控件的總寬度)

因為要做移動動畫效果,咱們?yōu)榱吮苊釧NR,直接開一個分線程來控制界面,主要代碼如下    

 //開啟分線程
    new Thread(new Runnable() {
      @Override
      public void run() {
        //每一段要移動的距離
        scrollDistance = (float) ((1.0 / pbProgressbar.getMax()) * width);
        for (int i = 1; i <= status; i++) {
          runOnUiThread(new Runnable() {
            @Override
            public void run() {
              currentStatue++;
              currentPosition += scrollDistance;
              pbProgressbar.incrementProgressBy(1);
              //做一個平移動畫的效果
              progressPrecent.setTranslationX(currentPosition);
              progressPrecent.setText(currentStatue + "%");
            }
          });
          try {
            Thread.sleep(80);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
      }
    }).start();

大功告成,但是當(dāng)我們運行起來的時候發(fā)現(xiàn),當(dāng)ProgressBar達(dá)到最大值時,上面的字體超出了屏幕范圍而看不到了。效果如圖所示:

這給使用者造成了很大的困惑,靜下心來分析一下,可以知道TextView一直在對應(yīng)ProgressBar數(shù)據(jù)的右面,語言功底不太好,咱們上圖看:

可以看出,當(dāng)數(shù)據(jù)為0%時就在progressBar對應(yīng)數(shù)據(jù)的右方,當(dāng)數(shù)據(jù)為最大值時,超出屏幕顯示不了就不足為其了。咱們現(xiàn)在如果想讓progressBar是最大值時還能顯示,就需要當(dāng)偏移的距離加上字體的寬度和字體右面的Padding值大于progressBar寬度的時候不偏移。接著修改代碼如下:

 //開啟分線程
    new Thread(new Runnable() {
      @Override
      public void run() {
        //每一段要移動的距離
        scrollDistance = (float) ((1.0 / pbProgressbar.getMax()) * width);
        for (int i = 0; i < status; i++) {
          runOnUiThread(new Runnable() {
            @Override
            public void run() {
              // 控制進度條的增長進度
              pbProgressbar.incrementProgressBy(1);
              currentStatue++;
              tvPrecent.setText(currentStatue + "%");
              // 得到字體的寬度
              tvWidth = tvPrecent.getWidth();
              currentPosition += scrollDistance;
              //做一個平移動畫的效果
              // 這里加入條件判斷
              if (tvWidth + currentPosition <= width - tvPrecent.getPaddingRight()) {
                tvPrecent.setTranslationX(currentPosition);
              }
            }
          });
          try {
            Thread.sleep(80);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
        }
      }
    }).start();

我們運行起來,再來看下效果:

到這里咱們就完成了,有不清楚或者寫錯的地方歡迎留言指正,我會第一時間答復(fù)。需要源碼的朋友可以去github上下載,雙手奉上github地址:字體隨著ProgressBar的加載而滾動 。

總結(jié)

以上所述是小編給大家介紹的Android開發(fā)之ProgressBar字體隨著進度條的加載而滾動,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Android圖片加載框架Glide的基本用法介紹

    Android圖片加載框架Glide的基本用法介紹

    本篇文章主要介紹了Android圖片加載框架Glide的基本用法介紹,具有一定的參考價值,有興趣的可以了解一下。
    2017-04-04
  • android recyclerview模擬聊天界面

    android recyclerview模擬聊天界面

    這篇文章主要為大家詳細(xì)介紹了android Listview模擬聊天界面的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Android開發(fā)中TextView文本過長滾動顯示實現(xiàn)方法分析

    Android開發(fā)中TextView文本過長滾動顯示實現(xiàn)方法分析

    這篇文章主要介紹了Android開發(fā)中TextView文本過長滾動顯示實現(xiàn)方法,結(jié)合實例形式分析了Android項目開發(fā)中TextView顯示超長文本的具體操作技巧與注意事項,需要的朋友可以參考下
    2018-02-02
  • Android入門之使用RecyclerView完美實現(xiàn)瀑布流界面詳解

    Android入門之使用RecyclerView完美實現(xiàn)瀑布流界面詳解

    網(wǎng)上充滿著不完善的基于RecyclerView的瀑布流實現(xiàn),要么根本是錯的、要么就是只知其一不知其二。本文就來用RecyclerView完美實現(xiàn)瀑布流界面,希望大家有所幫助
    2023-02-02
  • Android圖像處理之霓虹濾鏡效果

    Android圖像處理之霓虹濾鏡效果

    這篇文章主要介紹了Android圖像處理之霓虹濾鏡效果的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • 剖析Android Activity側(cè)滑返回的實現(xiàn)原理

    剖析Android Activity側(cè)滑返回的實現(xiàn)原理

    在很多的App中,都會發(fā)現(xiàn)利用手指滑動事件,進行高效且人性化的交互非常有必要,那么它是怎么實現(xiàn)的呢,本文給大家解析實現(xiàn)原理,對Activity側(cè)滑返回實現(xiàn)代碼感興趣的朋友一起看看吧
    2021-06-06
  • Android開發(fā)中Toast顯示消息的方法小結(jié)

    Android開發(fā)中Toast顯示消息的方法小結(jié)

    這篇文章主要介紹了Android開發(fā)中Toast顯示消息的方法,結(jié)合實例形式總結(jié)分析了Toast的功能、創(chuàng)建Toast對象及調(diào)用相關(guān)函數(shù)顯示消息提示框的操作技巧,需要的朋友可以參考下
    2016-10-10
  • Android 基于Socket的聊天應(yīng)用實例(二)

    Android 基于Socket的聊天應(yīng)用實例(二)

    本篇文章主要介紹了Android 基于Socket的聊天應(yīng)用實例,具有一定的參考價值,有需要的可以了解一下。
    2016-12-12
  • android studio 4.0 新建類沒有修飾符的方法

    android studio 4.0 新建類沒有修飾符的方法

    這篇文章主要介紹了android studio 4.0 新建類沒有修飾符的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Android錄音應(yīng)用實例教程

    Android錄音應(yīng)用實例教程

    這篇文章主要介紹了Android錄音應(yīng)用實例,是Android應(yīng)用程序開發(fā)中非常重要的一個功能,需要的朋友可以參考下
    2014-09-09

最新評論

南京市| 定安县| 日喀则市| 都安| 虞城县| 鹿泉市| 白沙| 买车| 沛县| 嫩江县| 屏山县| 屯昌县| 渝北区| 宁强县| 英吉沙县| 玉门市| 重庆市| 宜宾市| 乐安县| 三穗县| 交城县| 马关县| 瑞金市| 华池县| 密云县| 定陶县| 崇礼县| 仪征市| 吉林市| 毕节市| 民勤县| 平湖市| 黄山市| 灵宝市| 中西区| 包头市| 浙江省| 界首市| 文水县| 响水县| 龙胜|