使用PathMeasure简单模仿系统ProgressBar,效果如下:
还蛮像的吧,有的人问了,系统自带的你闲的搞这个干嘛,当然是纯粹为了学习PathMeasure这个类。
PathMeasure是用来测量路径路径的,可以截取路径中某一段路径,通过改变这段路径的起点,终点,达到类似VectorDrawable中的路径动画效果:
直接新就可以获得PathMeasure对象:
PathMeasure PathMeasure=new PathMeasure (); >之前或者
PathMeasure PathMeasure=new PathMeasure(路径,forceClosed); >之前其中路径代表一个路径对象,forceClosed代表你测量的路径是否闭合,如果为真,那么测量长度的时候周长会按path.close()来算。
也可以调用以下方法设置路径:
pathMeasure。setPath(路径,forceClosed); >之前获得路径的长度:
浮动长度=pathMeasure.getLength (); >之前截取路径,新截取到的赋值给一个新路径对象mDstPath
pathMeasure。getSegment(启动、停止、mDstPath,真实); >之前其中启动和停止为起止长度,第四个参数代表是否startWithMoveTo,是否从移至位置开始,一般为真的。
要实现上面的效果,那就用属性动画写一个0到1的百分比,根据当前的百分比和原路径的长度,动态改变新路径的起止点长度:
1,写自定义属性,构造方法,初始化油漆、路径、测量宽高。注意路径要两个,一个装有原始数据,一个去装新截取的路径数据:
mPath=新路径(); mDst=新路径(); >之前2,初始化PathMeasure,并设置路径,获得原始长度:
@Override 保护空白> 私人空间startAnim () { ValueAnimator动画=ValueAnimator。ofFloat (0,1); 动画。setInterpolator(新DecelerateInterpolator ()); anim.setRepeatCount (ValueAnimator.INFINITE); anim.setDuration (mAnimDuration); 动画。addUpdateListener(新ValueAnimator.AnimatorUpdateListener () { @Override 公共空间> @Override 保护空白> 公共空间开始(){ 错装=true; setVisibility (View.VISIBLE); startAnim (); } 公共空间停止(){ 错装=false; setVisibility (View.GONE); } 公共布尔isLoading () { 返回错装; } >之前按钮btn=(按钮)findViewById (R.id.btn); btn。setOnClickListener(新View.OnClickListener () { @Override 公共空间onClick(查看v) { 如果(loadingView.isLoading ()) { loadingView.stop (); 其他}{ loadingView.start (); } } });以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
Android自定义观点使用PathMeasure简单模仿系统ProgressBar(四)