欢迎来到天天文库
浏览记录
ID:57650023
大小:695.48 KB
页数:12页
时间:2020-08-30
《android-自定义view-水波纹进度球.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、android自定义view-水波纹进度球在我们的日常开发中自定义控件还是用的挺多的,设计师或者产品为了更好的漂亮,美观,交互都会做一些牛逼的ui效果图,但是最后实现的还是我们程序员啊。所以说自定义view你还是得会的。今天我们要实现的这个view没有太多交互性的view,所以就继承view自定义view的套路,套路很深·获取我们自定义属性attrs(可省略)·重写onMeasure方法,计算控件的宽和高·重写onDraw方法,绘制我们的控件这么看来,自定义view的套路很清晰嘛。我们看下今天的效果图,其中一个是放慢的效果
2、(时间调的长)我们按照套路来。一.自定义属性3、reference"/>4、reference"/>5、reference"/>6、on7、reference"/>8、reference"/>看下效果图我们就知道因该需要哪些属性。就不说了。然后就是获取我们的这些属性,就是用TypedArray来获取。当然是在构造中获取,一般我们会复写构造方法,少参数调用参数多的,然后走到参数最多的那个。下面是9、获取自定义属性的代码:TypedArraya=getContext().obtainStyledAttributes(attrs,R.styleable.WaveProgressView,defStyleAttr,R.style.WaveProgressViewDefault);radius=(int)a.getDimension(R.styleable.WaveProgressView_radius,radius);textColor=a.getColor(R.styleable.WaveProgressView_pro10、gress_text_color,0);textSize=a.getDimensionPixelSize(R.styleable.WaveProgressView_progress_text_size,0);progressColor=a.getColor(R.styleable.WaveProgressView_progress_color,0);radiusColor=a.getColor(R.styleable.WaveProgressView_radius_color,0);progress=a.getFloat(11、R.styleable.WaveProgressView_progress,0);maxProgress=a.getFloat(R.styleable.WaveProgressView_maxProgress,100);a.recycle();注:R.style.WaveProgressViewDefault是这个控件的默认样式。二.onMeasure测量我们重写这个方法主要是根据父控件的宽和高来设置自己的宽和高。@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,int12、heightMeasureSpec){//计算宽和高intexceptW=getPaddingLeft()+getPaddingRight()+2*radius;intexceptH=getPaddingTop()+getPaddingBottom()+2*radius;intwidth=resolveSize(exceptW,widthMeasureSpec);intheight=resolveSize(exceptH,heightMeasureSpec);intmin=Math.min(width,height);th13、is.width=this.height=min;//计算半径,减去padding的最小值intminLR=Math.min(getPaddingLeft(),getPaddingRight());intminTB=Math.min(getPaddingTop(),getPaddingBottom())
3、reference"/>4、reference"/>5、reference"/>6、on7、reference"/>8、reference"/>看下效果图我们就知道因该需要哪些属性。就不说了。然后就是获取我们的这些属性,就是用TypedArray来获取。当然是在构造中获取,一般我们会复写构造方法,少参数调用参数多的,然后走到参数最多的那个。下面是9、获取自定义属性的代码:TypedArraya=getContext().obtainStyledAttributes(attrs,R.styleable.WaveProgressView,defStyleAttr,R.style.WaveProgressViewDefault);radius=(int)a.getDimension(R.styleable.WaveProgressView_radius,radius);textColor=a.getColor(R.styleable.WaveProgressView_pro10、gress_text_color,0);textSize=a.getDimensionPixelSize(R.styleable.WaveProgressView_progress_text_size,0);progressColor=a.getColor(R.styleable.WaveProgressView_progress_color,0);radiusColor=a.getColor(R.styleable.WaveProgressView_radius_color,0);progress=a.getFloat(11、R.styleable.WaveProgressView_progress,0);maxProgress=a.getFloat(R.styleable.WaveProgressView_maxProgress,100);a.recycle();注:R.style.WaveProgressViewDefault是这个控件的默认样式。二.onMeasure测量我们重写这个方法主要是根据父控件的宽和高来设置自己的宽和高。@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,int12、heightMeasureSpec){//计算宽和高intexceptW=getPaddingLeft()+getPaddingRight()+2*radius;intexceptH=getPaddingTop()+getPaddingBottom()+2*radius;intwidth=resolveSize(exceptW,widthMeasureSpec);intheight=resolveSize(exceptH,heightMeasureSpec);intmin=Math.min(width,height);th13、is.width=this.height=min;//计算半径,减去padding的最小值intminLR=Math.min(getPaddingLeft(),getPaddingRight());intminTB=Math.min(getPaddingTop(),getPaddingBottom())
4、reference"/>5、reference"/>6、on7、reference"/>8、reference"/>看下效果图我们就知道因该需要哪些属性。就不说了。然后就是获取我们的这些属性,就是用TypedArray来获取。当然是在构造中获取,一般我们会复写构造方法,少参数调用参数多的,然后走到参数最多的那个。下面是9、获取自定义属性的代码:TypedArraya=getContext().obtainStyledAttributes(attrs,R.styleable.WaveProgressView,defStyleAttr,R.style.WaveProgressViewDefault);radius=(int)a.getDimension(R.styleable.WaveProgressView_radius,radius);textColor=a.getColor(R.styleable.WaveProgressView_pro10、gress_text_color,0);textSize=a.getDimensionPixelSize(R.styleable.WaveProgressView_progress_text_size,0);progressColor=a.getColor(R.styleable.WaveProgressView_progress_color,0);radiusColor=a.getColor(R.styleable.WaveProgressView_radius_color,0);progress=a.getFloat(11、R.styleable.WaveProgressView_progress,0);maxProgress=a.getFloat(R.styleable.WaveProgressView_maxProgress,100);a.recycle();注:R.style.WaveProgressViewDefault是这个控件的默认样式。二.onMeasure测量我们重写这个方法主要是根据父控件的宽和高来设置自己的宽和高。@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,int12、heightMeasureSpec){//计算宽和高intexceptW=getPaddingLeft()+getPaddingRight()+2*radius;intexceptH=getPaddingTop()+getPaddingBottom()+2*radius;intwidth=resolveSize(exceptW,widthMeasureSpec);intheight=resolveSize(exceptH,heightMeasureSpec);intmin=Math.min(width,height);th13、is.width=this.height=min;//计算半径,减去padding的最小值intminLR=Math.min(getPaddingLeft(),getPaddingRight());intminTB=Math.min(getPaddingTop(),getPaddingBottom())
5、reference"/>6、on7、reference"/>8、reference"/>看下效果图我们就知道因该需要哪些属性。就不说了。然后就是获取我们的这些属性,就是用TypedArray来获取。当然是在构造中获取,一般我们会复写构造方法,少参数调用参数多的,然后走到参数最多的那个。下面是9、获取自定义属性的代码:TypedArraya=getContext().obtainStyledAttributes(attrs,R.styleable.WaveProgressView,defStyleAttr,R.style.WaveProgressViewDefault);radius=(int)a.getDimension(R.styleable.WaveProgressView_radius,radius);textColor=a.getColor(R.styleable.WaveProgressView_pro10、gress_text_color,0);textSize=a.getDimensionPixelSize(R.styleable.WaveProgressView_progress_text_size,0);progressColor=a.getColor(R.styleable.WaveProgressView_progress_color,0);radiusColor=a.getColor(R.styleable.WaveProgressView_radius_color,0);progress=a.getFloat(11、R.styleable.WaveProgressView_progress,0);maxProgress=a.getFloat(R.styleable.WaveProgressView_maxProgress,100);a.recycle();注:R.style.WaveProgressViewDefault是这个控件的默认样式。二.onMeasure测量我们重写这个方法主要是根据父控件的宽和高来设置自己的宽和高。@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,int12、heightMeasureSpec){//计算宽和高intexceptW=getPaddingLeft()+getPaddingRight()+2*radius;intexceptH=getPaddingTop()+getPaddingBottom()+2*radius;intwidth=resolveSize(exceptW,widthMeasureSpec);intheight=resolveSize(exceptH,heightMeasureSpec);intmin=Math.min(width,height);th13、is.width=this.height=min;//计算半径,减去padding的最小值intminLR=Math.min(getPaddingLeft(),getPaddingRight());intminTB=Math.min(getPaddingTop(),getPaddingBottom())
6、on
7、reference"/>8、reference"/>看下效果图我们就知道因该需要哪些属性。就不说了。然后就是获取我们的这些属性,就是用TypedArray来获取。当然是在构造中获取,一般我们会复写构造方法,少参数调用参数多的,然后走到参数最多的那个。下面是9、获取自定义属性的代码:TypedArraya=getContext().obtainStyledAttributes(attrs,R.styleable.WaveProgressView,defStyleAttr,R.style.WaveProgressViewDefault);radius=(int)a.getDimension(R.styleable.WaveProgressView_radius,radius);textColor=a.getColor(R.styleable.WaveProgressView_pro10、gress_text_color,0);textSize=a.getDimensionPixelSize(R.styleable.WaveProgressView_progress_text_size,0);progressColor=a.getColor(R.styleable.WaveProgressView_progress_color,0);radiusColor=a.getColor(R.styleable.WaveProgressView_radius_color,0);progress=a.getFloat(11、R.styleable.WaveProgressView_progress,0);maxProgress=a.getFloat(R.styleable.WaveProgressView_maxProgress,100);a.recycle();注:R.style.WaveProgressViewDefault是这个控件的默认样式。二.onMeasure测量我们重写这个方法主要是根据父控件的宽和高来设置自己的宽和高。@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,int12、heightMeasureSpec){//计算宽和高intexceptW=getPaddingLeft()+getPaddingRight()+2*radius;intexceptH=getPaddingTop()+getPaddingBottom()+2*radius;intwidth=resolveSize(exceptW,widthMeasureSpec);intheight=resolveSize(exceptH,heightMeasureSpec);intmin=Math.min(width,height);th13、is.width=this.height=min;//计算半径,减去padding的最小值intminLR=Math.min(getPaddingLeft(),getPaddingRight());intminTB=Math.min(getPaddingTop(),getPaddingBottom())
8、reference"/>看下效果图我们就知道因该需要哪些属性。就不说了。然后就是获取我们的这些属性,就是用TypedArray来获取。当然是在构造中获取,一般我们会复写构造方法,少参数调用参数多的,然后走到参数最多的那个。下面是
9、获取自定义属性的代码:TypedArraya=getContext().obtainStyledAttributes(attrs,R.styleable.WaveProgressView,defStyleAttr,R.style.WaveProgressViewDefault);radius=(int)a.getDimension(R.styleable.WaveProgressView_radius,radius);textColor=a.getColor(R.styleable.WaveProgressView_pro
10、gress_text_color,0);textSize=a.getDimensionPixelSize(R.styleable.WaveProgressView_progress_text_size,0);progressColor=a.getColor(R.styleable.WaveProgressView_progress_color,0);radiusColor=a.getColor(R.styleable.WaveProgressView_radius_color,0);progress=a.getFloat(
11、R.styleable.WaveProgressView_progress,0);maxProgress=a.getFloat(R.styleable.WaveProgressView_maxProgress,100);a.recycle();注:R.style.WaveProgressViewDefault是这个控件的默认样式。二.onMeasure测量我们重写这个方法主要是根据父控件的宽和高来设置自己的宽和高。@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,int
12、heightMeasureSpec){//计算宽和高intexceptW=getPaddingLeft()+getPaddingRight()+2*radius;intexceptH=getPaddingTop()+getPaddingBottom()+2*radius;intwidth=resolveSize(exceptW,widthMeasureSpec);intheight=resolveSize(exceptH,heightMeasureSpec);intmin=Math.min(width,height);th
13、is.width=this.height=min;//计算半径,减去padding的最小值intminLR=Math.min(getPaddingLeft(),getPaddingRight());intminTB=Math.min(getPaddingTop(),getPaddingBottom())
此文档下载收益归作者所有