Android(安卓)自定义View measure模板
16lz
2021-12-04
使用自定义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;}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec));}}
更多相关文章
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python list sort方法的具体使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- 02相对布局
- Android的设置界面及Preference使用
- Android(安卓)技术栈总结
- Android使用自定义AlertDialog
- Android控件开发之四----ListView(2)