欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android編程實現(xiàn)類似于圓形ProgressBar的進度條效果

 更新時間:2017年03月04日 12:08:14   作者:aloxc  
這篇文章主要介紹了Android編程實現(xiàn)類似于圓形ProgressBar的進度條效果,結(jié)合實例形式分析了Android通過自定義View實現(xiàn)圓形進度條效果的操作方法,需要的朋友可以參考下

本文實例講述了Android編程實現(xiàn)類似于圓形ProgressBar的進度條效果。分享給大家供大家參考,具體如下:

我們要實現(xiàn)一個類似于小米分享中的圓形播放進度條,android自帶的圓形ProgressBar是默認自動旋轉(zhuǎn)的,所以無法實現(xiàn),于是我們想到了使用自定義一個View,來實現(xiàn)這種效果。

首先來看看自己定義的View

package cn.easymobi.application.bell.common;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;
public class ProgressView extends View{
  private float fArcNum;
  private float fMax;
  private float density;
  public float getDensity() {
    return density;
  }
  public void setDensity(float density) {
    this.density = density;
  }
  public ProgressView(Context context) {
    super(context);
  }
  public ProgressView(Context context,AttributeSet attrs) {
    super(context,attrs);
  }
  protected void onDraw(Canvas canvas) {
    // TODO Auto-generated method stub
    super.onDraw(canvas);
    Paint paint=new Paint();
    if(fArcNum>0)
      {
      paint.setColor(Color.GRAY);
      paint.setFlags(Paint.ANTI_ALIAS_FLAG);
      canvas.drawCircle(40*density/2, 40*density/2, 40*density/2, paint);
    }
    paint.setColor(Color.YELLOW);
    paint.setFlags(Paint.ANTI_ALIAS_FLAG);
    //paint.setStrokeWidth(2);
    RectF rect=new RectF(0, 0, 40*density, 40*density);
    canvas.drawArc(rect, -90, fArcNum,true, paint);
    paint.setColor(Color.BLACK);
    paint.setFlags(Paint.ANTI_ALIAS_FLAG);
    canvas.drawCircle(40*density/2, 40*density/2, 40*density/2-5, paint);
  }
  public void setProgress(float num) {
    fArcNum = (num/fMax) * 360;
  }
  public float getfArcNum() {
    return fArcNum;
  }
  public void setfArcNum(float fArcNum) {
    this.fArcNum = fArcNum;
  }
  public float getfMax() {
    return fMax;
  }
  public void setfMax(float fMax) {
    this.fMax = fMax;
  }
}

我們通過重寫View的onDraw方法,根據(jù)fArcNum好fMax來判斷當前播放到的位置,然后不停的刷新改View就實現(xiàn)了這個效果。至于畫弧,是采用了drawArc方法,然后通過在其內(nèi)部畫圓遮蓋多余部分實現(xiàn)。

下面是MediaPlayer與該View的同步處理,核心代碼如下

// *******************************************************************
// Func: playAudio
//
// by: Sun
// 2011.9.1
// *******************************************************************
public void playAudio(final String path, final ProgressBar pb) {
  Thread thread = new Thread(new Runnable() {
    public void run() {
      try {
        if (mpMediaPlayer != null) {
          mpMediaPlayer.stop();
          mpMediaPlayer.release();
          mpMediaPlayer = null;
        }
        mpMediaPlayer = new MediaPlayer();
        mpMediaPlayer.setDataSource(path);
        mpMediaPlayer.prepare();
        mpMediaPlayer.setOnPreparedListener(new OnPreparedListener() {
          public void onPrepared(MediaPlayer mp) {
            pb.setVisibility(ProgressBar.GONE);
            frontPv.setfMax(mpMediaPlayer.getDuration());
            frontPv.setProgress(0);
            mpMediaPlayer.start();
            refrash = new Thread(new Runnable() {
              public void run() {
                try {
                  while (frontPv.getfArcNum() <= 360 && mpMediaPlayer.isPlaying()) {
                    if (bIsOver)
                      break;
                    frontPv.setProgress(mpMediaPlayer.getCurrentPosition());
                    Thread.sleep(1000);
                    mHandle.sendEmptyMessage(MSG_REFRESH_UI);
                  }
                  mHandle.sendEmptyMessage(MSG_PLAY_OVER);
                }
                catch (Exception e) {
                  e.printStackTrace();
                }
              }
            });
            refrash.start();
          }
        });
      }
      catch (Exception e) {
        e.printStackTrace();
      }
    }
  });
  thread.start();
}

其中frontPv是我們自己定義的view,最后發(fā)送handler是調(diào)用invalidate方法刷新該 view,mpMediaPlayers是我們定義的MediaPlayer對象。我們通過在進程中每隔一秒更新frontPv當中的fArcNum并且 刷新實現(xiàn)轉(zhuǎn)動的動畫效果。

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開發(fā)入門與進階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)

希望本文所述對大家Android程序設(shè)計有所幫助。

相關(guān)文章

  • flutter直接上傳文件到阿里云oss

    flutter直接上傳文件到阿里云oss

    上傳視頻到oss,之前是走后端上傳到oss,會有一個問題就是我要先上傳給后端,后端再上傳給oss就會導致上傳多次,消耗時間過長影響用戶體驗,所以我參考文檔寫了直接上傳到阿里云oss獲取到文件訪問路徑。
    2021-05-05
  • Android獲取系統(tǒng)時間的多種方法

    Android獲取系統(tǒng)時間的多種方法

    這篇文章主要介紹了Android獲取系統(tǒng)時間的多種方法,對時間進行格式化操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • android studio 清單配置文件androidmainfest.xml詳細解讀

    android studio 清單配置文件androidmainfest.xml詳細解讀

    AndroidManifest官方解釋是應用清單,每個應用的根目錄中都必須包含一個,并且文件名必須一模一樣,這個文件中包含了APP的配置信息,系統(tǒng)需要根據(jù)里面的內(nèi)容運行APP的代碼,顯示界面,這篇文章介紹了android studio 清單配置文件androidmainfest.xml解讀,需要的朋友可以參考下
    2024-04-04
  • Android SharedPreferences實現(xiàn)記住密碼和自動登錄界面

    Android SharedPreferences實現(xiàn)記住密碼和自動登錄界面

    本篇文章主要介紹了Android記住密碼和自動登錄界面的實現(xiàn)(SharedPreferences),具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • Android 8.0 中如何實現(xiàn)視頻通話的畫中畫模式的示例

    Android 8.0 中如何實現(xiàn)視頻通話的畫中畫模式的示例

    本篇文章介紹了Android 8.0 中如何實現(xiàn)視頻通話的畫中畫模式的示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Retrofit之OKHttpCall源碼分析

    Retrofit之OKHttpCall源碼分析

    這篇文章主要介紹了Retrofit之OKHttpCall源碼分析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Android如何在Gradle中更改APK文件名詳解

    Android如何在Gradle中更改APK文件名詳解

    這篇文章主要介紹了Android如何在Gradle中更改APK文件名的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-10-10
  • Android編程設(shè)計模式之模板方法模式詳解

    Android編程設(shè)計模式之模板方法模式詳解

    這篇文章主要介紹了Android編程設(shè)計模式之模板方法模式,結(jié)合實例形式詳細分析了Android模板方法模式的概念、功能、使用場景、用法及相關(guān)操作注意事項,需要的朋友可以參考下
    2017-12-12
  • Android關(guān)于Glide的使用(高斯模糊、加載監(jiān)聽、圓角圖片)

    Android關(guān)于Glide的使用(高斯模糊、加載監(jiān)聽、圓角圖片)

    這篇文章主要為大家詳細介紹了Android關(guān)于Glide的使用,內(nèi)容豐富,高斯模糊、加載監(jiān)聽、圓角圖片希望大家可以掌握,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android首頁無限輪播功能的示例代碼

    Android首頁無限輪播功能的示例代碼

    這篇文章主要介紹了Android首頁無限輪播功能的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06

最新評論