Android 自定义View measure模板
2015-06-24 21:45
405 查看
使用自定义View的时候,我们往往会重载onMeasure函数, 用多了之后,发现其实都是一套写法,因此记录下这个模板.
public class MyView extends View { public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); } //计算宽 private int measureWidth(int measureSpec) { int result = 0; int mode = MeasureSpec.getMode(measureSpec); int size = MeasureSpec.getSize(measureSpec); if(mode == MeasureSpec.EXACTLY) //当指定了控件大小或者使用Match_Parent { result = size; }else { //可以用下面的函数将dp转换成px //float pxValue = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, getResources().getDisplayMetrics()); result = 100; // 单位是像素,这里写上自己计算的控件大小 if(mode == MeasureSpec.AT_MOST) //一般使用Wrap_Content会进入这个条件 { result = Math.min(result, size); } } return result; } //计算高 private int measureHeight(int measureSpec) { int result = 0; int mode = MeasureSpec.getMode(measureSpec); int size = MeasureSpec.getSize(measureSpec); if(mode == MeasureSpec.EXACTLY) //当指定了控件大小或者使用Match_Parent { result = size; }else { //可以用下面的函数将dp转换成px //float pxValue = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue, getResources().getDisplayMetrics()); result = 100; // 单位是像素,这里写上自己计算的控件大小 if(mode == MeasureSpec.AT_MOST) //一般使用Wrap_Content会进入这个条件 { result = Math.min(result, size); } } return result; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec)); } }
相关文章推荐
- Android dp,sp,pt,in,mm,px换算
- Android TouchEvent事件传递机制
- Android的string-array数据源简单使用
- android 调用系统相机拍照,并保存到SD卡
- mono for android 开发环境配置【官方】
- Android应用开发-小巫CSDN博客客户端Jsoup篇
- Android的四大组件
- android应用锁可以做的一些事
- android 学习网址
- Android---59---Toast的使用
- android 自定义对话框 保存设置数据
- Android ListView异步加载图片错位、重复、闪烁分析以及解决方案
- Android基础知识_Activity SingleInstance模式示例
- Android Selector 与 Shape 基本用法
- Android传感器
- 获取Android设备挂载的所有存储器
- 【正途】Android R.java文件丢失的问题
- android---xml---include用法(导入另一个XML文件到本布局中)
- Android OpenGL ES(四)----调整屏幕的宽高比
- Android基础知识_Activity SingleTask模式示例