当前位置: 移动技术网 > IT编程>移动开发>Android > Android编程实现类似于圆形ProgressBar的进度条效果

Android编程实现类似于圆形ProgressBar的进度条效果

2019年07月24日  | 移动技术网IT编程  | 我要评论

爱上别人的人dj,毕敏仪,海豚病

本文实例讲述了android编程实现类似于圆形progressbar的进度条效果。分享给大家供大家参考,具体如下:

我们要实现一个类似于小米分享中的圆形播放进度条,android自带的圆形progressbar是默认自动旋转的,所以无法实现,于是我们想到了使用自定义一个view,来实现这种效果。

首先来看看自己定义的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方法,根据farcnum好fmax来判断当前播放到的位置,然后不停的刷新改view就实现了这个效果。至于画弧,是采用了drawarc方法,然后通过在其内部画圆遮盖多余部分实现。

下面是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,最后发送handler是调用invalidate方法刷新该 view,mpmediaplayers是我们定义的mediaplayer对象。我们通过在进程中每隔一秒更新frontpv当中的farcnum并且 刷新实现转动的动画效果。

更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android多媒体操作技巧汇总(音频,视频,录音等)》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网