-
这个方法是转变为标准尺寸的一个函数,例如 int size = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, context.getResources().getDisplayMetrics()); 这里COMPLEX_UNIT_SP是单位,20是数值,也就是20sp。查看全部
-
圆形进度条 自己很早以前就写过一个,这里不看了。 https://github.com/xzhang76/CustomedProgressBar查看全部
-
自定义属性声明与获取查看全部
-
自定义控件的步骤 在本例子中,3、6这两个步骤是不需要的,因为本例子不需要用到viewGroup,5也不需要,因为不需要处理用户的点击事件 7也不需要,因为progressBar控件本身已经实现了状态的保存与恢复查看全部
-
2.自定义控件的onMeasure(),这个是重点! (2)宽 因为对于宽度来说,必须由用户指定,所以要么是固定值,或者是match_parent (3)最后调用setMeasuredDimension()来确定view的宽和高 protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { /** * 对于宽度来说,因为必须由用户指定,要么是固定值或match_parent */ // int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthVal = MeasureSpec.getSize(widthMeasureSpec); int height = measureHeight(heightMeasureSpec); setMeasuredDimension(widthVal, height); mRealWidth = getMeasuredWidth() - getPaddingLeft() - getPaddingRight(); } 3.小结 在onMeasure()这个方法中重要是确定view的高,一定要判断三种模式查看全部
-
1.获取自定义属性 自定义水平进度条共有7个自定义属性,在类初始化时给它们设置一个默认值,然后在构造函数中通过TypedArray来获取 TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.HorizontalProgressBar); mTextSize = (int) typedArray.getDimension(R.styleable.HorizontalProgressBar_progress_text_size, mTextSize); mTextColor = mUnreachColor = mUnreachHeight = mReachColor = mReachHeight = mTextOffset = typedArray.recycle(); 2.自定义控件的onMeasure(),这个是重点! onMeasure()需要区分三种不同的模式,模式和数值是通过辅助类MeasureSpec从onMeasure()的两个参数中获取的。 在这里需要确定水平进度条的宽和高 (1)高 private int measureHeight(int height) { int result = 0; int heightMode = MeasureSpec.getMode(height); int heightSize = MeasureSpec.getSize(height); // 下面就是三种模式的判断 if (heightMode == EXACTLY) { result = heightSize; } else { /**如果是UNSPECIFIED 高度值应该是左边进度条高度,右边进度条高度,文字高度三者最大值加上上下的padding*/ …… if (heightMode == AT_MOST) { /**如果是AT_MOST 高度值应该是进度条本身高度和父布局测量的高度值两者的较小值*/ } } return result; }查看全部
-
好难查看全部
-
handler实现循环处理完成进度条自动走
查看全部 -
自定义控件中要完成测量功能,设置你要完成的宽高
查看全部 -
自定义控件类中要绘画,画出进度条,用paint画
查看全部 -
自定义控件所有属性初始化
查看全部 -
自定义控件要完成属性自定义在attrs.xml下
申明属性
申明自定义类
在自定义类中使用上面申明的属性
查看全部 -
绘制文本,mPaint.setStyle(Style.FILL)
查看全部 -
计算弧度,绘制圆弧
float sweepAngle = getProgress() * 1.0f / getMax() * 360;
定义矩形 mRectf = new Rectf(0,0, radius *2 ,radius*2);
canvas.drawArc(mRectf,0,sweepAngle,false,mPaint);
查看全部 -
绘制圆形canvas.drawCircle(x,y,r,paint);
查看全部
举报
0/150
提交
取消