Android 的控件自定义有N多的方法, 简单点来总结至少包括
1. 组合控件。(将现有控件组合在你的新控件里,例如一个 ImageView 和 一个 Button 控件)之后总结这种自定义方式的具体使用。
2. 纯手工全新打造,继承自 View 自己重新写 onMeasure 以及 onDraw 函数 ... (好吧,这个家当比较专业,当然是否使用看你自己)
3. 现有原生控件显示改变。(继承自你需要改变的控件,然后修改他的 onDraw 函数)
这次简单点,我介绍方法3的实现:
例如修改TextView控件,给每个TextView显示前添加一个Icon。
1. 首先不罗嗦,继承自TextView。
2. 定义一个初始化函数, new Paint 对象,在 onDraw 函数中使用。(没必要每次都在 onDraw 函数中 new Paint)
3. 重载 onDraw 函数。
细节说明:
1. 继承自 TextView 后,构造函数选择成 public MyTextView(Context context, AttributeSet attrs)
要不使用的时候你会悲剧的
2. 添加成员变量 private Paint mIconPaint; 用来绘制Icon。(当然这里最好自己把平滑参数设置进去,别总是画出毛边)
3. 重载 onDraw 函数。
首先,绘制你的ICON,Canvas 的函数 drawBitmap 应该可以帮助你实现 ICON的绘制。
继续,完成ICON绘制后,(save) 画布, (translate)平移一下画布位置,让 父类 (TextView)完成剩余的绘制动作。
最后, 调用 super.onDraw, 让父类完成 TextView本身的绘制动作, 函数返回前 restore一下画布,你想要的就实现了。
看到这里,如果你想定制原生控件,那么应该有一个小思路了吧,也许以前看书的时候对于各种绘图函数的使用没有
太注意,呵呵,现在可以去复习一下了吧,用到了吧。(留个小问题,自定义控件,如果需要添加XML属性,)
==========================================================================
当然这里的实例,你也可以用组合控件,重新实现, ImageView + TextView 就 OK 了。
在java中一切皆为对象,在类中每个成员变量在使用前都会得到恰当的初始化,对于方法的局部变量,java以编译报错的形式来贯彻这种保证,如果写成如下: void f(){ int i; i++; }就会得到一条出错信息,告诉你i没有初始化。当然,编译器也可以为i赋一个默认值,但是未初始化的局部变量更有可能是程序猿的疏忽,所以采用默认值反而会掩盖这种失误,
FoveaBox: Beyond Anchor-based Object Detector (2019) 论文提出的FoveaBox实际上也是基于中心点进行边框左上角点、右下角点回归,而不是利用中心点直接对边框长宽进行回归。本算法在COCO测试集上的效果为42.1AP,相较于前面的...
小L的数列比赛主页我的提交时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 524288K,其他语言1048576K64bit IO Format: %lld题目描述小L喜欢数和数列。小L称a_1…a_na1 …an 这些数为优秀的。小L称一个序列b_1…b_mb1 …bm 为好的当且仅当:1.对于任意的 i (1 \leq i <m)i(1≤i<m),满足 b_i<b_{i+1}bi <bi+1 。2.对
Linux下运行HelloWorld程序出错(Java程序):Exception in thread “main” java.lang.NoClassDefFoundError: HelloWorld**PS:下列解决方法也适合解决在Windows下出现同样的问题,主要原因是环境变量路径不对实现与解决过程:1.在Linux下编写HelloWorld.java文件并保存到指定目录,例如我是保存...
java的三大特性: 继承,封装,多态其中多态是这三大特性中比较难理解的,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。 一、 什么是多态?多态的定义: 指允许不同类的对象对同一请求做出响应,也就是同一请求可以根据发送对象的不同而采用的多种不同的行为方式。 二、多态存在的三个必要条件:
用栈实现四则运算第一部分 :LinkStack.h#ifndef LINKSTACK_H#define LINKSTACK_H#include &lt;stdlib.h&gt;#include &lt;stdio.h&gt;#define SUCCESS 10000#define FAILURE 10001#define TRUE 10002#define FALSE 1000...
我的听书项目Java语言实现的大纲和具体梳理。
#element Radio
要说起GO语言的优势,我们就得从GO语言的历史讲起了……2007年,受够了C++煎熬的Google首席软件工程师Rob Pike纠集Robert Griesemer和Ken Thompson两位牛人,决定创造一种新语言来取代C++, 这就是Golang。出现在21世纪的GO语言,虽然不能如愿对C++取而代之,但是其近C的执行性能和近解析型语言的开发效率以及近乎于完美的编译速度,已经风靡全球。特...
这里是修真院后端小课堂,每篇分享文从八个方面深度解析后端知识/技能,本篇分享的是:【图片上传。】大家好,我是IT修真院郑州分院第十期学员,一枚正直纯洁善良的JAVA程序员。今天给大家分享一下,java任务扩展思考知识点——图片上传。一、背景介绍在开发过程中,不论是做网页还是APP,基本上都会有图片上传的业务需求,最典型的就是注册账号之后需要用户上传头像或者用户验证的时候上传身份证照片。...
Software Test Automation and the Product Life Cycleby Dave Kelly, Symantec Corporation Implementing software test in the product life cycleThe PLC and Automated TestA product's stages...
1、首先下载linux系统的mysql下载地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads2、将下载好的mysql上传到linux中输入rz指令选择下载好的mysql压缩包rz如果是在Xshell上操作直接拖入即可3、解压首先看下载好的mysql压缩包的名字.tar格式的输入指令tar -xvf this.tar //this是mysql文件的名字 .tar.gz格式的输入指令tar -xzvf this.ta