android构建自定义的视图组件onMeasure

本文介绍了如何在Android中创建自定义UI组件,包括完全自定义视图和扩展现有视图的方法。通过继承View或ViewGroup类,开发者可以实现对UI元素外观和功能的精确控制。

android提供了精巧和有力的组件化模型构建用户的UI部分。主要是基于布局类:View和ViewGroup。在此基础上,android平台提供了大量的预制的View和ViewGroup子类,即布局(layout)和窗口小部件(widget)。可以用它们构建自己的UI。

如果没有符合你需求的预制窗口小部件,你可以创建自己的视图子类。如果只是对已存在的窗口小部件或者布局做小的调整,只需继承该类,覆盖相关的方法。

创建你自己的View子类可以更精确控制视图元素的外观和功能。

1 可创建完整的自定义渲染视图类型,比如创建一个2d的控制条;

2 可将一组视图组件合成为一个新的单一组件,比如双选的列表,选择省和市;

3 覆盖EditText组件,比如notepad tutorial中的示例;

4 捕捉其他事件比如按键事件,并执行自定义的处理方式,比如在游戏中。

基本方法

总的来说,创建自定义的视图组件步骤是:

1 创建自己的类,继承已经存在的View类或者子类;

2 覆盖超类的一些方法。这些超类的方法一般以“on”开头,比如onDraw()方法等等;

3 使用新创建的扩展类。一旦完成,你的新扩展类就可以用于所有View使用的地方。

 

注意:扩展类可以定义为内部类,在你创建的Activity类之中。这很有用,因为这样可以控制外界的访问,但是这不是必须的,因为你可能需要一个public的自定义View类供更广泛的使用。

完全自定义组件

完全自定义的组件可以创建图形组件显示在你需要的任何地方。

步骤如下:

1 可以继承的最通用的视图类是View,可以继承它创建自定义的组件超类;

2 可以提供构造方法,并通过xml文件获取属性值和参数;

3 创建自己的事件监听器,属性访问器和编辑器等等; 

4 一般情况下会覆盖onMeasure()方法和onDraw()方法,这会让组件显示一些东西。如果都用默认的行为,onDraw()方法不做任何事情,onMeasure()方法设置一个100×100的区域;

5 根据需求覆盖其他on…方法。

 

扩展onDraw()和onMeasure()方法

onDraw()方法提供给你一个Canvas对象,在它之上可以实现任何你想要的东西,通过2d图形api。比如其他标准的后者自定义的组件,风格化的文字后者其他。

注意:这里不提供3d图形api的支持。如果你需要3d图形支持,必须继承SurfaceView而不是View,并且通过单独的线程画图。可以通过GLSurfaceViewActivity实例查看详细信息。

onMeasure()方法有些麻烦。该方法是在容器和自定义组件之间渲染的重要部分。该方法覆盖,要高效率的和精确的报告被包含区域的测量值。

总的来看,实现onMeasure()方法类似如下步骤:

1 调用已经覆盖的onMeasure()方法,传递长和宽规范参数;

2 自定义组件在onMeasure()方法中计算需要渲染的组件的长和宽,应该在规范参数的范围内;

3 一旦长和宽计算出来,必须调用setMeasuredDimension(int width, int height)方法,这步失败会导致异常的抛出。

一个自定义视图的示例

自定义视图的示例,见:LabelView

该示例演示了一些自定义组件的不同方面:

1 继承View类,用于完全自定义组件;

2 参数化的构造方法,提供更多的参数,定义在xml文件中;

3 标准的公开方法,用于设置标签,比如setText()方法等;

4 覆盖onMeasure方法确定渲染的组件尺寸; 覆盖onDraw方法,在提供的canvas中画标签。

可以找到对示例的一些使用,在custom_view_1.xml文件中。

(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值