自定义控件
来源:互联网 发布:mac无损播放器 编辑:程序博客网 时间:2024/06/06 09:55
三种类型
- 组合已有的控件
- 完全自定义控件
- 继承特定的控件(像TextView,ListView)
记录一下完全自定义控件的实现
1.界面绘制流程
测量 摆放 绘制 measure -> layout -> draw | | | onMeasure -> onLayout -> onDraw 重写这些方法, 实现自定义控件 都在onResume()之后执行 View流程 onMeasure() (在这个方法里指定自己的宽高) -> onDraw() (绘制自己的内容) ViewGroup流程 onMeasure() (指定自己的宽高, 所有子View的宽高)-> onLayout() (摆放所有子View) -> onDraw() (绘制内容)
2.实现
//在xml中实现自己的属性 首先在value中的attrs.xml文件中建立自己需要用到的属性: 例如: <resources> <declare-styleable name="myView"> <attr name="myView_background" format="reference" /> <attr name="myView_state" format="boolean" /> </declare-styleable></resources>在布局文件声明:xmls:myView="http://schemas.android.com/apk/res-auto"然后就可以<xx.xx.myView android:layout_width = "" android:layout_height = "" myView:myView_background = "@mipmap/background" myView:myView_state = "false">这里可以注意下声明的时候xmls:myView="http://schemas.android.com/apk/res/包名"和xmls:myView="http://schemas.android.com/apk/res-auto/包名"的区别
// private Bitmap mMyViewBackgroundBitmap; private boolean mState; public myView(Context context, AttributeSet attrs) { super(context, attrs); init(); String namespace = "http://schemas.android.com/apk/res-auto"; int myViewBackgroundResource = attrs.getAttributeResourceValue(namespace , "myView_background", -1); //获取资源id mState = attrs.getAttributeBooleanValue(namespace, "myView_state", false); mMyViewBackgroundBitmap = BitmapFactory.decodeResource(getResources(),myViewBackgroundResource);//将资源转成bitmap类型 } //测量 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(mMyViewBackgroundBitmap .getWidth(), mMyViewBackgroundBitmap .getHeight()); //设置宽度高度 } //绘制 @Override protected void onDraw(Canvas canvas) { Paint paint =new paint(); canvas.drawBitmap(mMyViewBackgroundBitmap ,0,0,paint);}
这里继承view,简单的实现,就没用到布局onlayout
0 0
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 自定义控件
- 机器学习相关知识
- 第十一周OJ——求两个整数的最大公约数和最小公倍数
- Part 71 - childactiononly attribute in mvc
- Ajax在JQuery中的运用(Post方法)
- 在windows10下搭建Storm并运行WordCount详解(单机版)!
- 自定义控件
- python中MySQLdb的execute和executemany的使用
- Kafka的使用背景
- 软件工程各文档间的联系
- B树(平衡多路查找树)
- Mysql修改登录密码
- js中的onload
- oracle通过dblink连接mysql配置详解(全Windows下)
- Linux 安装