浅谈自定义控件

当Android原生的控件无法满足我们的需要时,又或者说我们想实现一个特别炫的控件,又或者说我们就是叼,就想和别人不一样,这时候我们就不得不去自己去一步一步的去创建一个控件,也就是自己定义一个控件。
说到自定义控件的实现,从当下所分的派系而言,可以衍生出三大派:
第一种实现方式就是继承已有的控件来实现自定义控件: 主要是当要实现的控件和已有的控件在很多方面比较类似, 通过对已有控件的扩展来满足要求。比如说,我想让一个TextView不仅可以添加文字也可以添加图片,那么我们就可以继承Textview控件。
第二种通过继承一个布局文件实现自定义控件,一般来说做组合控件时可以通过这个方式来实现。注意此时不用onDraw方法,在构造广告中通过inflater加载自定义控件的布局文件,再addView(view),自定义控件的图形界面就加载进来了。
第三种就是通过继承view类来实现自定义控件,使用GDI绘制出组件界面,一般无法通过上述两种方式来实现时用该方式。
说到第三种,有的同志就问了,什么是GDI?大家不妨可以百度一下,在这里我也粘贴一下GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。
其实话又说回来Android的UI界面都是由View和ViewGroup及其派生类组合而成的,其中最重要的三个方法是onMeasure(int,int),onLayout(boolean,int,int,int,int),onDraw(Cancas),当然了除了这三种方法之外,还有很多方法,这里我们先主要阐述一下这三个方法是怎么个意思。

@Override
// 当系统测量view的大小的时候,调用
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
// 我们必须告诉系统,这个view有多大,通过调用setMeasuredDimension(width,height)
setMeasuredDimension(200,80);
}


@Override
/**
* 当系统指定view的位置后,回调 该方法 ,view的位置,由父view决定,子view只有建议权,没


有决定权
* @params changed 当前view的尺寸和位置,是否发生变化
* @params left,top,right,bottom 当前view在父view中的位置

*/
protected void onLayout(boolean changed, int left, int top, int right,
int bottom) {
super.onLayout(changed, left, top, right, bottom);

}
@Override
/**
* 绘制view的内容
*/
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.GREEN);
}


除了上述的主要方法之外,当然了还有很多方法,如下:


onFinishlnflate()这是一个回调方法, 当应用从 XML 布局文件加载该组件并利用它来构建界面之后, 该方法就会被回调。

onMeasure(int,int):调用该方法来检测View组件及它所包含的所有子组件的大小.

onlayout(boolean,int,int,int,int):当该组件需要分配其子组件的位置、大小时,该方法就会被回调. View类中布局发生改变时会调用的方法,这个方法是所有View、ViewGroup及其派生类都具有的方法,重载该类可以在布局发生改变时作定制处理,这在实现一些特效时非常有用。

onSizeChanged(int,int, int, int):当该组件的大小被改变时回调该方法.

onDraw(canves): 当该组件将要绘制它的内容时回调该方法迸行绘制. View类中用于重绘的方法,这个方

法是所有View、ViewGroup及其派生类都具有的方法,也是Android UI绘制最重要的方法。开发者可 重载该方法,并在重载的方法内部基于参数canvas绘制自己的各种图形、图像效果。
onKeyDown(int,KeyEvent): 当某个键被按下时触发该方法.

onKayUp(int,KeyEvent), 当松开某个键时触发该方法.

onTrackballEvent (MotionEvent): 当发生轨迹球事件时触发该方法.

onTouchEvent (MotionEvent): 当发生触摸屏事件时触发该方法.

onWindowFocuschanged(boolean): 当该组件得到、失去焦点时触发该方法.

onAttachedToWindow():当把该组件放入某个窗口时触发该方法.

onDetachedFromWindow(): 当把该组件从某个窗口上分离时触发该方法.

onWindowVisibilityChanged(int):当包含该组件的窗口的可见性发生改变时触发该方法.

另外再补充两个ViewGroup类经常重载的方法:
1.protected void dispatchDraw(Canvas canvas):ViewGroup类及其派生类具有的方法,这个方法主要用于控制子View的绘制分发,重载该方法可改变子View的绘制,进而实现一些复杂的视效。
2.protected boolean drawChild(Canvas canvas, View child, long drawingTime)):ViewGroup 类及其派生类具有的方法,这个方法直接控制绘制某局具体的子view,重载该方法可控制具体某个具体子View。

说了各种方法之后,我们在说一说几个构造函数:构造函数里的参数有一个的,也有多个的,具体的构造的函数具体到描述的含义是什么,这里我们也简单陈述一下。
第一个构造函数:     当不需要使用xml声明或者不需要使用inflate动态加载时候,实现此构造函数即可 

第二个构造函数:     当需要在xml中声明此控件,则需要实现此构造函数。并且在构造函数中把自定义的属性与控件的数据成员连接起来。  

第三个构造函数:     接受一个style资源  
【3D应力敏感度分析拓扑优化】【基于p-范数全局应力衡量的3D敏感度分析】基于伴随方法的有限元分析和p-范数应力敏感度分析(Matlab代码实现)内容概要:本文档介绍了基于伴随方法的有限元分析与p-范数全局应力衡量的3D应力敏感度分析,并结合拓扑优化技术,提供了完整的Matlab代码实现方案。该方法通过有限元建模计算结构在载荷作用下的应力分布,采用p-范数对全局应力进行有效聚合,避免传统方法中应力约束过多的问题,进而利用伴随法高效求解设计变量对应力的敏感度,为结构优化提供关键梯度信息。整个流程涵盖了从有限元分析、应力评估到敏感度计算的核心环节,适用于复杂三维结构的轻量化与高强度设计。; 适合人群:具备有限元分析基础、拓扑优化背景及Matlab编程能力的研究生、科研人员与工程技术人员,尤其适合从事结构设计、力学仿真与多学科优化的相关从业者; 使用场景及目标:①用于实现高精度三维结构的应力约束拓扑优化;②帮助理解伴随法在敏感度分析中的应用原理与编程实现;③服务于科研复现、论文写作与工程项目中的结构性能提升需求; 阅读建议:建议读者结合有限元理论与优化算法知识,逐步调试Matlab代码,重点关注伴随方程的构建与p-范数的数值处理技巧,以深入掌握方法本质并实现个性化拓展。
下载前必看:https://pan.quark.cn/s/9f13b242f4b9 Android 平板设备远程操控个人计算机的指南 Android 平板设备远程操控个人计算机的指南详细阐述了如何运用 Splashtop Remote 应用程序达成 Android 平板设备对个人计算机的远程操控。 该指南被划分为四个环节:首先,在个人计算机上获取并部署 Splashtop Remote 应用程序,并设定客户端密码;其次,在 Android 平板设备上获取并部署 Splashtop Remote 应用程序,并与之建立连接至个人计算机的通道;再次,在 Splashtop Remote 应用程序中识别已部署个人计算机端软件的设备;最后,运用平板设备对个人计算机实施远程操控。 关键点1:Splashtop Remote 应用程序的部署与配置* 在个人计算机上获取并部署 Splashtop Remote 应用程序,可通过官方网站或其他获取途径进行下载。 * 部署结束后,必须输入客户端密码,该密码在平板控制计算机时用作验证,密码长度至少为8个字符,且需包含字母与数字。 * 在配置选项中,能够设定是否在设备启动时自动运行客户端,以及进行互联网搜索设置。 关键点2:Splashtop Remote 应用程序的 Android 版本获取与部署* 在 Android 平板设备上获取并部署 Splashtop Remote 应用程序,可通过 Google Play Store 或其他获取途径进行下载。 * 部署结束后,必须输入客户端密码,该密码用于连接至个人计算机端软件。 关键点3:运用 Splashtop Remote 远程操控个人计算机* 在 Splashtop Remote 应用程序中识别...
先看效果: https://pan.quark.cn/s/7baef05d1d08 在信息技术范畴内,语音识别是一项核心的技术,它赋予计算机或设备解析和处理人类语音输入的能力。 本研究项目运用了MFCC(Mel Frequency Cepstral Coefficients)与VQ(Vector Quantization)算法,借助VC++6.0的MFC(Microsoft Foundation Classes)库,开发出一个图形用户界面(GUI),从而达成基础的语音识别功能。 接下来将具体分析这些技术及其应用。 **MFCC特征提取**MFCC是语音信号处理中的一个标准方法,用于将复杂的语音波形转换成一组便于处理的数据参数。 MFCC模拟人类听觉系统对声音频率的感知模式,通过梅尔滤波器组对声音频谱进行分段处理,进而计算每个滤波器组的倒谱系数。 该过程包含以下环节:1. **预加重**:旨在削弱人声的低频响应部分,同时增强高频成分的强度。 2. **分帧和窗函数**:将语音信号分割成多个短时帧,并应用窗函数以降低帧与帧之间的相互干扰。 3. **梅尔尺度滤波**:采用梅尔滤波器组对每一帧进行剖析,获取梅尔频率谱。 4. **取对数**:鉴于人耳对声音强度的感知呈现非线性特征,因此对梅尔频率谱取对数操作以更好地符合人类听觉系统。 5. **离散余弦变换(DCT)**:对对数谱实施DCT运算,提取主要特征,通常选取前12-20个系数作为MFCC特征。 6. **动态特性**:为了捕捉语音的时域变化特征,还可计算MFCC特征的差分值和二阶差分值。 **VQ识别算法**VQ是一种数据压缩方法,在语音识别领域中常用于特征矢量的量化处理。 其基本理念是将高维度的MFCC特征向量映射到一个小型、预...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员一鸣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值