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

Android實現(xiàn)簡潔的APP更新dialog數(shù)字進(jìn)度條

 更新時間:2017年04月11日 17:02:31   作者:曦笑大海  
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)簡潔的APP更新dialog數(shù)字進(jìn)度條,具有一定的參考價值,感興趣的小伙伴們可以參考一下

前言:現(xiàn)在一般的Android軟件都是需要不斷更新的,當(dāng)你打開某個app的時候,如果有新的版本,它會提示你有新版本需要更新。當(dāng)有更新時,會彈出一個提示框,點擊下載,則在通知來創(chuàng)建一個數(shù)字進(jìn)度條進(jìn)行下載,下載成功后才到安裝界面。

效果: 

 

開發(fā)環(huán)境:AndroidStudio2.2.1+gradle-2.14.1

涉及知識:

    1.Handler機(jī)制 

    2.自定義控件+Canvas繪畫 

    3.自定義dialog 

部分代碼: 

public class NumberProgressBar extends View {


 /**
  * 右側(cè)未完成進(jìn)度條的顏色
  */
 private int paintStartColor = 0xffe5e5e5;

 /**
  * Contxt
  */
 private Context context;

 /**
  * 主線程傳過來進(jìn)程 0 - 100
  */
 private int progress;

 /**
  * 得到自定義視圖的寬度
  */
 private int viewWidth;


 private RectF pieOval;

 private RectF pieOvalIn;

 /**
  * 得到自定義視圖的Y軸中心點
  */
 private int viewCenterY;

 /**
  * 已完成的畫筆
  */
 private Paint paintInit = new Paint();


 /**
  * 未完成進(jìn)度條畫筆的屬性
  */
 private Paint paintStart = new Paint();

 /**
  * 大圓的畫筆
  */
 private Paint paintEndBig = new Paint();

 /**
  * 小圓的畫筆
  */
 private Paint paintSmall = new Paint();


 /**
  * 畫中間的百分比文字的畫筆
  */
 private Paint paintText = new Paint();

 /**
  * 要畫的文字的寬度
  */
 private int textWidth;

 /**
  * 畫文字時底部的坐標(biāo)
  */
 private float textBottomY;

 private int smallR;//小圓的半徑
 private int bigR;//大圓半徑
 private float radius;
 private int jR;//氣泡矩形

 /**
  * 文字總共移動的長度(即從0%到100%文字左側(cè)移動的長度)
  */
// private int totalMovedLength;
 public NumberProgressBar(Context context, AttributeSet attrs) {
  super(context, attrs);
  this.context = context;
  // 構(gòu)造器中初始化數(shù)據(jù)
  smallR = dip2px(context, 4);//小圓半徑
  bigR = dip2px(context, 8);//大圓半徑
  radius = dip2px(context, 10) / 2;//進(jìn)度條高度
  jR = dip2px(context, 6);//矩形

  initData();
 }

 /**
  * 初始化數(shù)據(jù)
  */
 private void initData() {

  // 未完成進(jìn)度條畫筆的屬性
  paintStart.setColor(paintStartColor);
  paintStart.setStrokeWidth(dip2px(context, 1));
  paintStart.setDither(true);
  paintStart.setAntiAlias(true);
  paintStart.setStyle(Paint.Style.FILL);

  // 已完成進(jìn)度條畫筆的屬性
  paintInit.setColor(context.getResources().getColor(R.color.blue));
  paintInit.setStrokeWidth(dip2px(context, 1));
  paintInit.setAntiAlias(true);
  paintInit.setDither(true);
  paintInit.setStyle(Paint.Style.FILL);


  // 小圓畫筆
  paintSmall.setColor(Color.WHITE);
  paintSmall.setAntiAlias(true);
  paintSmall.setStyle(Paint.Style.FILL);

  // 大圓畫筆
  paintEndBig.setColor(context.getResources().getColor(R.color.blue));
  paintEndBig.setAntiAlias(true);
  paintEndBig.setStyle(Paint.Style.FILL);


  // 百分比文字畫筆的屬性
  int paintTextSizePx = sp2px(context, 11); //設(shè)置百分比文字的尺寸
  paintText.setColor(context.getResources().getColor(R.color.blue));
  paintText.setTextSize(paintTextSizePx);
  paintText.setAntiAlias(true);
  paintText.setTypeface(Typeface.DEFAULT_BOLD);

 }

 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  super.onMeasure(widthMeasureSpec, heightMeasureSpec);
 }


 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);

  //得到float型進(jìn)度
  float progressFloat = progress / 100.0f;
  int viewHeight = getMeasuredHeight();//得到控件的高度

  viewWidth = getMeasuredWidth() - 4 * jR;

  viewCenterY = viewHeight - bigR;

  float currentMovedLen = viewWidth * progressFloat + 2 * jR;

  String str = progress + "%";

  Rect bounds = new Rect();
  paintText.getTextBounds(str, 0, str.length(), bounds);
  textWidth = bounds.width();
  textBottomY = bounds.height();
/**
 * 1:繪畫的文本
 * 2.距離x的位移
 * 3.距離Y的位移
 * 4.畫筆對象
 */
  canvas.drawText(str, currentMovedLen - textWidth / 2,
    viewCenterY - smallR / 2 - bigR / 2 - 2 * jR + textBottomY / 2,
    paintText);//文字


  //圓角矩形初始的
  canvas.drawRoundRect(new RectF(2 * jR, viewCenterY - radius, currentMovedLen,
      viewCenterY + radius),
    radius, radius, paintInit);

  //圓角矩形--進(jìn)行中
  canvas.drawRoundRect(new RectF(currentMovedLen, viewCenterY - radius, viewWidth + 2 * jR,
    viewCenterY + radius), radius, radius, paintStart);

  pieOval = new RectF(currentMovedLen - bigR, viewCenterY - bigR, currentMovedLen + bigR, viewCenterY + bigR);

  pieOvalIn = new RectF(currentMovedLen - smallR, viewCenterY - smallR, currentMovedLen + smallR, viewCenterY + smallR);

  //大圓
  canvas.drawArc(pieOval, 0, 360, true, paintEndBig);

  //小圓
  canvas.drawArc(pieOvalIn, 0, 360, true, paintSmall);
 }

 /**
  * @param progress 外部傳進(jìn)來的當(dāng)前進(jìn)度
  */
 public void setProgress(int progress) {
  this.progress = progress;
  invalidate();
 }

 public static int dip2px(Context ctx, float dp) {
  float density = ctx.getResources().getDisplayMetrics().density;
  int px = (int) (dp * density + 0.5f);
  return px;
 }

 public static int sp2px(Context context, float spValue) {
  return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spValue, context.getResources().getDisplayMetrics());
 }
}

源碼下載:dialog數(shù)字進(jìn)度條

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • android的GC內(nèi)存泄露問題

    android的GC內(nèi)存泄露問題

    本篇文章主要介紹了android GC內(nèi)存泄露問題,具有一定的參考價值,有需要的可以了解一下。
    2016-11-11
  • Android開發(fā)之經(jīng)典游戲貪吃蛇

    Android開發(fā)之經(jīng)典游戲貪吃蛇

    貪吃蛇是一款足夠經(jīng)典的游戲。它的經(jīng)典,在于用戶操作的簡單,在于技術(shù)實現(xiàn)的簡介,在于他的經(jīng)久不衰。下面來看下如何在Android開發(fā)這款經(jīng)典游戲。
    2016-07-07
  • Android使用Span打造豐富多彩的文本詳解

    Android使用Span打造豐富多彩的文本詳解

    在開發(fā)過程中經(jīng)常需要使用文本,有時候需要對一段文字中的部分文字進(jìn)行特殊的處理,如改變其中部分文字的大小、顏色、加下劃線等。本文將為大家介紹如何實現(xiàn)這些效果,感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • android通過servlet上傳文件到服務(wù)器

    android通過servlet上傳文件到服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了android通過servlet上傳文件到服務(wù)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Android 使用AsyncTask實現(xiàn)多線程斷點續(xù)傳

    Android 使用AsyncTask實現(xiàn)多線程斷點續(xù)傳

    本文將詳細(xì)講解如何使用AsyncTask來實現(xiàn)多線程的斷點續(xù)傳下載功能,感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧
    2018-05-05
  • Android動畫之小球擬合動畫實例

    Android動畫之小球擬合動畫實例

    這篇文章主要介紹了Android動畫之小球擬合動畫實例的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • 解決Android Studio sdk emulator directory is missing問題

    解決Android Studio sdk emulator directory is missing問題

    這篇文章主要介紹了解決Android Studio sdk emulator directory is missing問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Android項目開發(fā)常用工具類LightTaskUtils源碼介紹

    Android項目開發(fā)常用工具類LightTaskUtils源碼介紹

    LightTaskUtils是一個輕量級的線程管理工具,本文通過實例代碼給大家詳細(xì)介紹Android項目開發(fā)常用工具類LightTaskUtils的相關(guān)知識,感興趣的朋友一起看看吧
    2022-06-06
  • Android實現(xiàn)底部支付彈窗效果

    Android實現(xiàn)底部支付彈窗效果

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)底部支付彈窗效果的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 基于Android SQLiteOpenHelper && CRUD 的使用

    基于Android SQLiteOpenHelper && CRUD 的使用

    本篇文章小編為大家介紹,基于Android SQLiteOpenHelper && CRUD的使用。需要的朋友可以參考一下
    2013-04-04

最新評論

尼勒克县| 蒙城县| 海原县| 台北县| 赤壁市| 长宁区| 饶河县| 黄骅市| 兴宁市| 涟水县| 如东县| 什邡市| 东阳市| 东山县| 平舆县| 正宁县| 深水埗区| 正蓝旗| 临朐县| 南木林县| 溧水县| 嘉祥县| 邛崃市| 古蔺县| 赤城县| 舞钢市| 克山县| 易门县| 巴林右旗| 子洲县| 延安市| 宁南县| 鄂托克旗| 高雄市| 宣化县| 商丘市| 东至县| 伊通| 古交市| 绥宁县| 日喀则市|