自定义初学1——扩展系统控件

简介: 在Android中自定义控件时,如果Android系统中已存在对应的控件,就应该扩展功能相近的系统控件,这样既可以减少工作量,又可以避免处理复杂的绘图逻辑。
在Android中自定义控件时,如果Android系统中已存在对应的控件,就应该扩展功能相近的系统控件,这样既可以减少工作量,又可以避免处理复杂的绘图逻辑。代码复用是程序开发的一条重要原则,因此一定不要盲目的扩展View。

好了,先从一个扩展的TextView入手吧
public class CustomTextView extends TextView {

}
系统会提示我们建立构造函数,说一下这三个构造函数的不同。


  • public CustomTextView(Context context):通常在代码中使用,控件的所有属性都使用默认值
  • public CustomTextView(Context context, AttributeSet attrs):如果在xml布局中设置控件的属性,这些属性会存到attrs中然后传递给构造函数,这些属性值会决定控件的最终效果
  • public CustomTextView(Context context, AttributeSet attrs,int defStyle):如果需要在xml布局中为控件设置style属性,defStyle会存储style的id并将其传递给构造函数,然后控件会根据属性style的属性值设置自己的样式

我们就设置一下字体加粗吧
/**
  * 初始化画笔
  */
 private void initPaint() {
  // 实例化画笔
  mPaint=getPaint();
  // 设置字体加粗
  mPaint.setFakeBoldText(true);
 }
Paint的set方法可以设置画笔的属性,具体的可以看API的解释



然后调用onDraw(canvas)方法,否则所有绘制效果都无法展示
@Override
 protected void onDraw(Canvas canvas) {
  // TODO Auto-generated method stub
  super.onDraw(canvas);
 }
Canvas是画布的意思,Paint是画笔,通过Canvas下的各类drawXXX方法绘制各种不同的东西,然后展示在画布上
Canvas的相关drawXXX方法如下



在xml布局文件中使用自定义控件时,控件的标签必须使用控件的完整类名
activity_main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <com.example.activity.CustomTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="这是自定义TextView"
        android:textSize="20sp" />

</RelativeLayout>

好了,现在看一下效果吧,运行效果如下:



源代码

参考:http://blog.csdn.net/aigestudio/article/details/41212583





相关文章
|
API 图形学
Winform控件优化之自定义控件的本质【从圆角控件看自定义的本质,Region区域无法反锯齿的问题】
自定义控件的本质只有两点:重绘控件Region区域(圆角、多边形、图片等),这是整个控件的真实范围;重绘图形,在原有Region范围内,重绘不同的图形(圆角、多边形、图片等)作为背景......
545 0
Winform控件优化之自定义控件的本质【从圆角控件看自定义的本质,Region区域无法反锯齿的问题】
|
25天前
|
前端开发 Android开发 开发者
安卓开发中的自定义视图:构建你的第一个控件
【8月更文挑战第26天】在安卓开发的浩瀚海洋中,自定义视图是一块充满魔力的乐土。它不仅是开发者展示创造力的舞台,更是实现独特用户体验的关键。本文将带你步入自定义视图的世界,从基础概念到实战应用,一步步教你如何打造自己的第一个控件。无论你是初学者还是有经验的开发者,这篇文章都将为你的开发之旅增添新的风景。
|
自然语言处理 编译器 C#
【WPF】实现动态切换语言(国际化)以及动态换肤功能
以下内容,手把手从搭建到最终实现,完成多语言切换以及换装功能。
414 0
【WPF】实现动态切换语言(国际化)以及动态换肤功能
|
移动开发 JavaScript weex
uniapp原生子窗体subNvue的使用超容易理解的总结,解决覆盖不了视频或者地图等层级问题
uniapp原生子窗体subNvue的使用超容易理解的总结,解决覆盖不了视频或者地图等层级问题
2299 0
uniapp原生子窗体subNvue的使用超容易理解的总结,解决覆盖不了视频或者地图等层级问题
|
Web App开发
艾伟:WinForm控件开发总结(七)-----为复杂属性的子属性提供编辑功能
前面的几篇文章中,我们给控件添加一个复杂的类型Scope,并且给它的类型提供的一个类型转换器,现在我们可以在属性浏览器中编辑它的值,并且它的值也被串行化的源代码里了。但是你有没有发现,在属性浏览器里编辑这个属性的值还是不太方便。
689 0
|
Windows
UWP 扩展/自定义标题栏的方法,一些概念和一些注意事项
原文 UWP 扩展/自定义标题栏的方法,一些概念和一些注意事项 在 Windows 10 的前几个版本中将页面内容扩展到标题栏上还算简单,主要是没什么坑。直到一些新控件的引入和一些外观设计趋势变化之后,扩展标题栏开始出现一些坑了。
1284 0