android群英传之自定义View--对现有控件进行扩展(1)
2016-03-07 00:00
465 查看
很多时候系统自带的控件无法满足我们设计的要求,这个时候android提供的允许自定义view的办法就帮了我们大忙。在android中,自定义view主要有三种实现方式
1.对现有控件进行扩展
2.通过组合实现新的控件
3.重写view来实现新的控件
现在先是第一点,对现有控件进行扩展
书中给了两个例子,第一个是对textview控件进行扩展,代码片段如下:
在这之前,我们需要在构造方法中增加对画笔属性的初始化,因为我们要在布局文件中使用到这个自定义的view,所以要添加两个参数的构造方法,这里的第二个参数AttributeSet来完成控件类的构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来(如果有的话),而拥有一个参数的构造函数只适合于直接在activity用代码调用该view时使用。
然后在xml文件中添加该控件
1.对现有控件进行扩展
2.通过组合实现新的控件
3.重写view来实现新的控件
现在先是第一点,对现有控件进行扩展
书中给了两个例子,第一个是对textview控件进行扩展,代码片段如下:
protected void onDraw(Canvas canvas) { //绘制外层矩形 canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), mPaint1); //绘制内层矩形 canvas.drawRect(10, 10, getMeasuredWidth()-10, getMeasuredHeight()-10, mPaint2); canvas.save(); //绘制文字前平移10像素 canvas.translate(10, 0); //在回调父方法之前实现自己的逻辑,对Textview来说即是在绘制文本之前 super.onDraw(canvas); //在回调父方法之后实现自己的逻辑,对Textview来说即是在绘制文本之后 canvas.restore(); }
在这之前,我们需要在构造方法中增加对画笔属性的初始化,因为我们要在布局文件中使用到这个自定义的view,所以要添加两个参数的构造方法,这里的第二个参数AttributeSet来完成控件类的构造函数,并在构造函数中将自定义控件类中变量与attrs.xml中的属性连接起来(如果有的话),而拥有一个参数的构造函数只适合于直接在activity用代码调用该view时使用。
<span style="font-size:18px;"> public RecTextView(Context context,AttributeSet attributeSet) { super(context,attributeSet); // TODO Auto-generated constructor stub. mPaint1 = new Paint(); mPaint1.setColor(getResources().getColor(android.R.color.holo_blue_light)); mPaint1.setStyle(Paint.Style.FILL); mPaint2 = new Paint(); mPaint2.setColor(Color.YELLOW); mPaint2.setStyle(Paint.Style.FILL); }</span>
然后在xml文件中添加该控件
<span style="font-size:18px;"> < com.example.textviewbyextend.RecTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="android hello"/></span>完成之后,就可以在代码中实例化这个布局文件了
<span style="font-size:18px;"> public class MainActivity extends Activity { private RecTextView recTextView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }</span>效果如图:
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories