Android_(自定义view_2)
来源:互联网 发布:国内室内滑雪场 知乎 编辑:程序博客网 时间:2024/06/05 03:10
笔记是个人学习整理。
View绘制过程
View的绘制可以分为下面三个过程:
1:Measure
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {}
View类已经提供了一个基本的onMeasure实现:
public static int getDefaultSize(int size, int measureSpec) { int result = size; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); switch (specMode) { case MeasureSpec.UNSPECIFIED: result = size; break; case MeasureSpec.AT_MOST: case MeasureSpec.EXACTLY: result = specSize; break; } return result; }
MeasureSpec类是View类的一个内部静态类,它定义了三个常量UNSPECIFIED、AT_MOST、EXACTLY,其实我们可以这样理解它,它们分别对应LayoutParams中match_parent、wrap_content、xxxdp。我们可以重写onMeasure来重新定义View的宽高
2:Layout
Layout过程对于View类非常简单,同样View给我们暴露了onLayout方法
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {}
3:Draw
Draw过程,就是在canvas上画出我们需要的View样式。同样View给我们暴露了onDraw方法
protected void onDraw(Canvas canvas) {}
View中还有三个比较重要的方法
requestLayout
View重新调用一次layout过程。
invalidate
View重新调用一次draw过程
forceLayout
标识View在下一次重绘,需要重新调用layout过程。
测试:public class DemoView extends View { public DemoView(Context context) { this(context,null); } public DemoView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public DemoView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); .......}
View有了三个构造方法需要我们重写,这里介绍下三个方法会被调用的场景,
第一个方法,一般我们这样使用时会被调用,View view = new View(context);
第二个方法,当我们在xml布局文件中使用View时,会在inflate布局时被调用,
。
第三个方法,跟第二种类似,但是增加style属性设置,这时inflater布局时会调用第三个构造方法。
。
0 0
- Android_(自定义view_2)
- android自定义View_2——Making the View Interactive
- Android_自定义控件
- Android_自定义控件样式
- android_自定义notification
- android_自定义弹出框
- android_自定义Loading框
- Android_自定义控件
- Android_自定义标签换行
- Android_(自定义view_3)
- Android_自定义View
- Android_自定义ViewPager指示器
- android_自定义折叠View
- Android_自定义View拖拽重绘
- Android_自定义标签ViewLayout
- Android_自定义删除View
- Android_自定义倒计时View
- Android_自定义控件_HorizontalListView
- Balanced Binary Tree
- alarm的一种用法。
- font—专题
- ios应用内跳转到appstore里评分
- mysql更新除最后三条外的其他记录
- Android_(自定义view_2)
- 均值归一化处理(Mean normalization)
- 网络请求同步异步
- 鼠标滚轮滑动轮播
- mysql memory引擎表
- spring配置的详细介绍
- oracle union 与 union all
- Web网站开发组合方式
- ASP.NET 无刷新上传文件