为了账号安全,请及时绑定邮箱和手机立即绑定
  • 绘制条形进度条 1.onDraw() protected synchronized void onDraw(Canvas canvas) { canvas.save(); boolean noNeedUnreach; // reached String text = mProgress + "%"; float ratio = mProgress * 1.0f / getMax(); float progressX = ratio * mRealWidth; float reachX = progressX - mTextOffset / 2 - textWidth / 2; if ((progressX + textWidth / 2) >= mRealWidth) { reachX = mRealWidth - textWidth - mTextOffset / 2; noNeedUnreach = true; } if (reachX > 0) { ...... canvas.drawLine(0, 0, reachX, 0, mPaint); } else { progressX = textWidth / 2; } // text ...... canvas.drawText(text, progressX - textWidth / 2, textY, mPaint); // unreached if (!noNeedUnreach) { ...... canvas.drawLine(progressX + textWidth / 2 + mTextOffset / 2, 0, mRealWidth, 0, mPaint); } canvas.restore(); }
    查看全部
  • 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; }
    查看全部
  • 自定义控件步骤
    查看全部
  • 好难
    查看全部
  • 三种模式
    查看全部
  • 如何自定义控件 1.需要注意的点和步骤 如图 参考之前的笔记:http://www.imooc.com/note/579?sort=last&page=1&owner=mine 2.重新复习了一下卫星菜单和自定义的ViewPagerIndicator 3.自定义属性的使用 (1)attrs.xml声明 (2)layout布局中指定 (3)java代码中使用TypedArray获取并赋值 本项目中需要自定义的属性 (1)水平进度条两边的进度条颜色和宽度,中间数字部分的颜色和字体大小 (3)圆形进度条背景的颜色和宽度,进度条的颜色和宽度,中间数字部分
    查看全部
  • 如何自定义控件
    查看全部
  • 可以
    查看全部
    0 采集 收起 来源:课程梳理

    2016-09-13

  • <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="progress_horizontal"> <attr name="progress_reach_color" format="color"></attr> <attr name="progress_reach_hight" format="dimension"></attr> <attr name="progress_unreach_color" format="color"></attr> <attr name="progress_unreach_hight" format="dimension"></attr> <attr name="progress_text_color" format="color"></attr> <attr name="progress_text_size" format="dimension"></attr> <attr name="progress_text_offset" format="dimension"></attr> </declare-styleable> </resources>
    查看全部
  • 自定义控件步骤
    查看全部
  • 这个方法是转变为标准尺寸的一个函数,例如 int size = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, context.getResources().getDisplayMetrics()); 这里COMPLEX_UNIT_SP是单位,20是数值,也就是20sp。
    查看全部
  • dp转换成px的函数
    查看全部
  • 1233456
    查看全部
  • 截图123
    查看全部

举报

0/150
提交
取消
课程须知
本门课程开发环境为Eclipse! 想学的小伙伴们要有一定的Android基础! 特别是自定义控件的基础!
老师告诉你能学到什么?
1、自定义控件编写 2、自定义条形进度条 3、自定义圆形进度条

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!