亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android實現百分比下載進度條效果

2019-10-21 21:31:29
字體:
來源:轉載
供稿:網友

現在很多APP中都會集成下載功能,所以有一個方便好看又實用的進度條來展示下載進度很有必要,也能提高用戶體驗,在這里我就把項目里的下載進度條抽取出來分享給大家,話不多說,先看效果圖:

Android,百分比,下載,進度條

這個進度條是自定義的一個View,其中有一個自定義屬性就是百分比文字的大?。ㄒ部梢园涯莾蓷l顯示顏色的進度條自定義屬性,這里就沒有實現,在代碼里面寫的)。

先說說實現原理:

1:由于自定義了屬性,所以先獲取屬性的值。

2:繪制底色那條灰色的線。

3:根據傳入的數據計算當前百分比,然后繪制那條橘黃色的線。

4:再在橘黃色線后面把百分比的文字繪制出來就OK了。

現在來看看代碼:

一:屬性設置attrs.xml文件

<?xml version="1.0" encoding="utf-8"?> <resources>  <declare-styleable name="downloadProgressBar">  <attr name="dptextsize" format="dimension"/>  </declare-styleable> </resources> 

其中dptextsize就是自定義屬性的名字

二:自定義view DownLoadProgressbar.Java

 

package com.ywl5320.downloadprogressdemo.downloadview;  import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; import android.view.ViewTreeObserver.OnGlobalLayoutListener;  import com.ywl5320.downloadprogressdemo.R;  /**  * 下載進度條  *  * @author ywl  *  */ public class DownLoadProgressbar extends View {   private Paint paint = new Paint(); // 繪制背景灰色線條畫筆  private Paint paintText = new Paint(); // 繪制下載進度畫筆  private float offset = 0f; // 下載偏移量  private float maxvalue = 0f; // 下載的總大小  private float currentValue = 0f; // 下載了多少  private Rect mBound = new Rect(); // 獲取百分比數字的長寬  private String percentValue = "0%"; // 要顯示的現在百分比  private float offsetRight = 0f; // 灰色線條距離右邊的距離  private int textSize = 25; // 百分比的文字大小  private float offsetTop = 18f; // 距離頂部的偏移量   public DownLoadProgressbar(Context context) {  this(context, null);  // TODO Auto-generated constructor stub  }   public DownLoadProgressbar(Context context, AttributeSet attribute) {  this(context, attribute, 0);  }   public DownLoadProgressbar(Context context, AttributeSet attrs,   int defStyleAttr) {  super(context, attrs, defStyleAttr);  // TODO Auto-generated constructor stub  // 獲取自定義屬性,給textsize賦初始值  TypedArray t = getContext().obtainStyledAttributes(attrs,   R.styleable.downloadProgressBar);  textSize = (int) t.getDimension(   R.styleable.downloadProgressBar_dptextsize, 36);  getTextWidth();  }   @Override  protected void onDraw(Canvas canvas) {  // TODO Auto-generated method stub  super.onDraw(canvas);  // 繪制底色  paint.setColor(getResources().getColor(R.color.no1_gray_light));  paint.setStrokeWidth(1);  canvas.drawLine(0, offsetTop, getWidth(), offsetTop, paint);  // 繪制進度條顏色  paint.setColor(getResources().getColor(R.color.no2_orange));  paint.setStrokeWidth(2);  canvas.drawLine(0, offsetTop, offset, offsetTop, paint);  // 繪制白色區域及百分比  paint.setColor(getResources().getColor(R.color.no3_white));  paint.setStrokeWidth(1);  paintText.setColor(getResources().getColor(R.color.no2_orange));  paintText.setTextSize(textSize);  paintText.setAntiAlias(true);  paintText.getTextBounds(percentValue, 0, percentValue.length(), mBound);  canvas.drawLine(offset, offsetTop, offset + mBound.width() + 4, offsetTop, paint);  canvas.drawText(percentValue, offset, offsetTop + mBound.height() / 2 - 2, paintText);  }   /**  * 設置當前進度值  *  * @param currentValue  */  public void setCurrentValue(float currentValue) {  this.currentValue = currentValue;  int value = (int) (this.currentValue / maxvalue * 100);  if (value < 100) {   percentValue = value + "%";  } else {   percentValue = "100%";  }  initCurrentProgressBar();  invalidate();  }   /**  * 設置最大值  *  * @param maxValue  */  public void setMaxValue(float maxValue) {  this.maxvalue = maxValue;  }   /**  * 獲取當前進度條長度  *  * @param maxValue  * @param currentValue  * @return  */  public void initCurrentProgressBar() {  getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {    @Override   public void onGlobalLayout() {   // TODO Auto-generated method stub   if (currentValue < maxvalue) {    offset = (getWidth() - offsetRight) * currentValue / maxvalue;   } else {    offset = getWidth() - offsetRight;   }   }  });   }   /**  * 獲取“100%”的寬度  */  public void getTextWidth() {  Paint paint = new Paint();  Rect rect = new Rect();  paint.setTextSize(textSize);  paint.setAntiAlias(true);  paint.getTextBounds("100%", 0, "100%".length(), rect);  offsetRight = rect.width() + 5;  } } 

這就是實現代碼,代碼不多,注解也有,不是很難。使用時只需傳入文件最大值,當前下載了多少就能自動計算出百分比。如果循環傳入,就實現了動態跑動的效果。

三:Activity布局文件 activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  xmlns:ywl="http://schemas.android.com/apk/res/com.ywl5320.downloadprogressdemo" <!-- 這就是為自定義屬性添加命名空間,注意res后的是:程序包名-->  android:layout_width="match_parent"  android:layout_height="match_parent"  android:background="@color/no3_white"  tools:context="${relativePackage}.${activityClass}" >   <TextView  android:id="@+id/tv_start"  android:layout_width="match_parent"  android:layout_height="50dip"  android:layout_below="@+id/rl_progress"  android:layout_marginTop="40dip"  android:layout_marginLeft="20dip"  android:layout_marginRight="20dip"  android:gravity="center"  android:background="@drawable/btn_blue_selector"  android:text="開始"/>   <RelativeLayout  android:id="@+id/rl_progress"  android:layout_width="match_parent"  android:layout_marginLeft="20dip"  android:layout_marginRight="20dip"  android:layout_marginTop="30dip"  android:layout_height="50dip">  <TextView   android:id="@+id/tv_size"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:layout_marginTop="4dip"   android:textColor="@color/no5_gray_silver"   android:textSize="12sp" />   <TextView   android:id="@+id/tv_speed"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:layout_alignParentRight="true"   android:layout_marginTop="6dip"   android:textColor="@color/no5_gray_silver"   android:textSize="12sp" />   <com.ywl5320.downloadprogressdemo.downloadview.DownLoadProgressbar   android:id="@+id/dp_game_progress"   android:layout_width="match_parent"   android:layout_height="wrap_content"   ywl:dptextsize="14sp" <!-- 這里設置控件的字體大小為14sp -->   android:layout_below="@+id/tv_size">  </com.ywl5320.downloadprogressdemo.downloadview.DownLoadProgressbar>  </RelativeLayout>  </RelativeLayout> 

程序中的文件大小,當前下載量和下載速度,都是在這里布局的,用的時候可以動態設置就行了,也可以把這個布局文件封裝為listview的item布局文件,那樣就可以制作下載列表了。

四:MainAcativity.java

package com.ywl5320.downloadprogressdemo;  import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView;  import com.ywl5320.downloadprogressdemo.downloadview.DownLoadProgressbar;  public class MainActivity extends Activity {   private TextView mStart;  private TextView mSize;  private TextView mSpeed;  private DownLoadProgressbar mProgress;  private int max = 100; //總的大小  private int current = 0; //當前下載大小  private String speed = "1"; //下載速度   @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  mStart = (TextView) findViewById(R.id.tv_start);  mProgress = (DownLoadProgressbar) findViewById(R.id.dp_game_progress);  mSize = (TextView) findViewById(R.id.tv_size);  mSpeed = (TextView) findViewById(R.id.tv_speed);  //初始化下載進度  mSize.setText(current + "MB/" + max + "MB");  //初始化下載速度  mSpeed.setText(speed + "MB/s");  mStart.setOnClickListener(new OnClickListener() {    @Override   public void onClick(View v) {   // TODO Auto-generated method stub   start();   }  });  }   //循環模擬下載過程  public void start() {  if (current <= max) {   mSize.setText(current + "MB/" + max + "MB");   mSpeed.setText(speed + "MB/s");   mProgress.setMaxValue(max);   mProgress.setCurrentValue(current);   handler.postDelayed(runnable, 100);  } else {   handler.removeCallbacks(runnable);  }   }   Handler handler = new Handler();  Runnable runnable = new Runnable() {  @Override  public void run() {   // TODO Auto-generated method stub   current = current + 1;   start();  }  };  } 

就這樣一個簡單實用的下載百分比進度條就實現了,有需要可以直接用就行:Android百分比下載進度條

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧洲视频在线| 色与欲影视天天看综合网| 亚洲嫩模很污视频| 中文字幕亚洲图片| 国产一区二区三区视频在线观看| 欧美一级大片在线观看| 91精品国产综合久久香蕉| 日韩在线中文视频| 国产精品视频精品| 性日韩欧美在线视频| 国产在线久久久| 欧美激情a∨在线视频播放| 国产亚洲人成网站在线观看| 亚洲精品国产精品国自产在线| 日韩精品电影网| 一区二区亚洲精品国产| 欧美精品国产精品日韩精品| 中文字幕久精品免费视频| 亚洲乱码一区av黑人高潮| 91精品在线观看视频| 亚洲欧美日本伦理| 亚洲人成伊人成综合网久久久| 国产精品白嫩初高中害羞小美女| 国产女同一区二区| 国产一区玩具在线观看| 亚洲最大激情中文字幕| 一区二区三区 在线观看视| 亚洲国产日韩欧美综合久久| 在线播放国产精品| 69av成年福利视频| 7m精品福利视频导航| 中文字幕在线观看日韩| 成人妇女免费播放久久久| 人妖精品videosex性欧美| 91精品久久久久久久久久入口| 久久精品成人一区二区三区| 一二美女精品欧洲| 日韩激情av在线免费观看| 国产成人精品在线| 欧美做受高潮电影o| 夜夜嗨av色一区二区不卡| 国产精品一二区| 91免费人成网站在线观看18| 日韩高清av一区二区三区| 在线观看国产成人av片| 韩曰欧美视频免费观看| 久久在线免费视频| 亚洲欧美日韩爽爽影院| 26uuu亚洲伊人春色| 免费99精品国产自在在线| 久久久久成人网| 国产成人拍精品视频午夜网站| 这里只有精品久久| 国产精品夜色7777狼人| 国产日韩中文字幕| 日本久久久a级免费| 国产精品嫩草影院一区二区| 欧美成人久久久| 中文字幕欧美在线| 欧美激情第99页| 亚洲老板91色精品久久| 欧美激情综合亚洲一二区| 国内精品久久久久久| 国产成人精品在线| 欧美另类高清videos| 久久综合88中文色鬼| 91免费人成网站在线观看18| 一个人看的www欧美| 91久久久久久久久久久久久| 国产免费一区视频观看免费| 91久久精品国产91性色| 亚洲福利在线视频| 色婷婷av一区二区三区在线观看| 8090理伦午夜在线电影| 欧洲成人性视频| 456国产精品| 国产精品流白浆视频| 北条麻妃99精品青青久久| 亚洲成人精品av| 国产亚洲精品91在线| 成人精品一区二区三区电影黑人| 国产成人在线一区| 国产精品久久久久久久一区探花| 在线视频亚洲欧美| 日韩在线免费视频观看| 欧美性猛交xxxx黑人猛交| 91精品啪aⅴ在线观看国产| 91美女福利视频高清| 91丝袜美腿美女视频网站| 亚洲色图偷窥自拍| 日韩专区在线播放| 久久精品成人欧美大片| 亚洲电影av在线| 亚洲精品在线不卡| 2020久久国产精品| 欧美怡春院一区二区三区| 91在线免费看网站| 日本成人在线视频网址| 日韩电影大片中文字幕| 国产精选久久久久久| 国产精品一区二区久久| 日本亚洲欧洲色α| 久久激情视频免费观看| 日韩a**中文字幕| 国产欧美日韩精品专区| 最近免费中文字幕视频2019| 欧美在线播放视频| 日韩av一区二区在线观看| 欧美精品免费看| 精品国产网站地址| 亚洲美女av在线| 国语自产精品视频在线看抢先版图片| 国产精品一区二区久久国产| 91精品视频网站| 亚洲国产精品网站| 久久久久中文字幕| 日韩影视在线观看| 亚洲乱码av中文一区二区| 26uuu另类亚洲欧美日本老年| 欧美亚洲成人xxx| 九九九久久国产免费| 久久av在线看| 色综合色综合网色综合| 久久亚洲综合国产精品99麻豆精品福利| 日韩成人av在线播放| 中文字幕欧美日韩| 国产精品入口尤物| 亚洲免费一级电影| 欧美激情精品久久久久久变态| 欧洲成人免费视频| 97碰在线观看| 日韩中文字幕欧美| 97在线免费视频| 欧美在线一级视频| 国产亚洲精品成人av久久ww| 欧美在线视频网| 福利二区91精品bt7086| 91av在线国产| 亚洲石原莉奈一区二区在线观看| 欧美在线www| 色播久久人人爽人人爽人人片视av| 亚洲直播在线一区| 黄色一区二区在线| 国产欧美最新羞羞视频在线观看| 国产精品久久久久久久久久久久| 日韩精品黄色网| 国产欧美在线观看| 久久精品久久久久| 日韩日本欧美亚洲| 国产精品久久久av| 欧美性猛交xxxx久久久| 国自产精品手机在线观看视频| 日本一区二三区好的精华液| 日韩欧美中文字幕在线观看| 国产丝袜精品视频| 欧美日韩在线看| 欧美精品在线免费观看| 日韩中文在线中文网三级| 久久久在线视频| 91视频国产精品| 欧美做爰性生交视频| 亚洲精品一区在线观看香蕉| 亚洲欧美在线x视频| 欧美激情视频在线免费观看 欧美视频免费一|