没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
在Android开发中,系统提供给我们的UI控件是有限的,当我们需要使用一些特殊的控件的时候,只靠系统提供的控件,可能无法达到我们想要的效果,这时,就需要我们自定义一些控件,来完成我们想要的效果了。下面,我就来讲讲自定义控件的那些事。 首先,我来讲讲Android的控件架构。Android的控件可以被分为两类,分别是ViewGroup和View。在ViewGroup中可以包含多个View,并且管理他们。控件树就是有这两个部分组成的,控件树的上层负责的是下层控件的绘制和测量以及交互。我们在Activity中使用的findViewById()方法,就是在控件树中用深度遍历的方法搜索到对应的ID的。
资源详情
资源评论
资源推荐
Android自定义自定义View的使用及其原理知识点总结的使用及其原理知识点总结
在Android开发中,系统提供给我们的UI控件是有限的,当我们需要使用一些特殊的控件的时候,只靠系统提供的控件,可能
无法达到我们想要的效果,这时,就需要我们自定义一些控件,来完成我们想要的效果了。下面,我就来讲讲自定义控件的那
些事。
首先,我来讲讲Android的控件架构。Android的控件可以被分为两类,分别是ViewGroup和View。在ViewGroup中可以包含多
个View,并且管理他们。控件树就是有这两个部分组成的,控件树的上层负责的是下层控件的绘制和测量以及交互。我们在
Activity中使用的findViewById()方法,就是在控件树中用深度遍历的方法搜索到对应的ID的。每一颗控件树的顶部,都有个
ViewParent对象,他是整棵树的核心,负责调度所有的交互事件。在Activity中,我们是使用setContentView()来加载布局的。
每个Activity都是包含着一个Window对象的,在Android中通常是PhoneWindow,他将一个DecorView作为整个窗口的根View,
将要显示的内容呈现在window上。DecorView又分为两个部分,一个是TitleView,一个是ContentView。ContentView是一个ID
为content的Framelayout,布局文件就是设置在这里面的。而TitleView就是我们看到topbar标题栏。这就是activity加载布局文件
的过程了。
接下来,我们开始讲自定义控件的使用,下面讲解使用的时候,会夹带着一些原理的分析。自定义控件可以分为三种类型,一
种是拓展谷歌提供的系统控件,来达到自己想要的效果。一种是将系统提供的控件组合在一起,作为一个组合控件来使用。还
有一种是重新绘制测量一个全新的控件。
一、拓展谷歌提供的系统控件一、拓展谷歌提供的系统控件
假如我们要对Textview控件进行拓展,首先我们要定义一个类继承TextView,选择性的重写它的onDraw()、onMeasure()、
onTouchEvent()等方法。其中,onDraw()负责对图像的绘制,onMeasure()负责测量位置,onTouchEvent()负责设置触摸的
事件。当我们想直接绘制出有背景颜色的TextView时,可以在类中定义画笔,在onDraw()进行绘制。代码如下:
Paint paint1=new Paint(); //定义画笔
paint1.setColor(Color.YELLOW);
paint1.setStyle(Paint.Style.FILL);
然后,通过以下的代码,就可以绘制出一个带矩形框的Textview,但是需要在绘制完成后在调用父类的onDraw(),因为是
在系统控件上拓展,所以,还要有其原来的功能。
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),paint1);//绘制矩形
canvas.save();
super.onDraw(canvas);
canvas.restore();
}
使用canvas对象就可以进行绘图了,对canvas的讲解,我将会在下一篇博客讲解。
然后,我们只需要在布局文件中加入自定义的控件即可,在布局文件中,自定义view的名字就是自定义控件类的包名加上类
名,假设定义CustomTextview类继承TextView,例子如下:
<com.example.myapplication.View.CustomTextView
android:layout_width="wrap_content"
android:layout_height="match_parent"></com.example.myapplication.View.Buttonbtn>
二、将系统提供的控件组合在一起二、将系统提供的控件组合在一起
除了拓展原有的控件以外,我们还可以将控件组合成一个新的控件使用。首先,我们先定义一个新的布局文件,并把
Imageview和Textview加入,代码如下。
<ImageView
android:id="@+id/iv"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@mipmap/ic_launcher" />
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:text="消息"
android:textSize="13sp" />
然后我们定义一个类继承LinearLayout,在类的构造方法中对控件和布局进行初始化。
weixin_38614287
- 粉丝: 5
- 资源: 932
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0