位置: 编程技术 - 正文

Android自定义带消息提醒控件(android 自定义)

编辑:rootadmin

推荐整理分享Android自定义带消息提醒控件(android 自定义),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android自定义loading,Android自定义带标题的cardview,android自定义样式,android 自定义drawable,android 自定义,android自定义样式,android 自定义style,android 自定义,内容如对您有帮助,希望把文章链接给更多的朋友!

相信大家都玩过各类社交软件,当有消息提示的时候会有消息提醒以便用户通知用户有消息了

安卓里面能实现这种效果有2种方式

1 可以用个framelayout来控制位置

2 写个自定义View来专门为这个需求服务(今天要讲的重点)

3 网上专门有一个BadgeView来做这事情(这东西我看了一下源码,大概思路就是 该控件继承了TextView,经过各种处理之后把要设置的view的父layout改成了FrameLayout,,其实是跟第一点思路有点类&#;的,但是这有一个问题,当你原来的父控件是相对布局也就是RelaviteLayout的时候 用这个控件就6了 位置全乱了,欢迎尝试,这东西百度一下整页都是 小弟就不放链接了昂)

小弟文采有限就不bb太多了

直接开始吧

分大概x个步骤

1 自定义属性(没自定义属性还叫自定义View??)

2 测量该控件的宽高

3 测量控件里头图片的大小,位置

4 测量消息提醒的圆或者其他奇形怪状的消息提醒x形状的位置

5 测量消息提醒字体的位置

嗯 x=5;

首先自定义View肯定有自定义属性,不然就没&#;&#;了哈

属性如下:

res-values-attr.xml里头

badge means 标签

属性就不介绍了 见名思意

然后通过布局文件设置该属性:

记得要在命名空间加上 xmlns:custom=" (直接复制自动生成的 改一下就好了 最后的是你的项目的包名)

然后通过代码取得设置的属性:

先声明全局变量:

构造方法里面:

initTextPaint()方法就是初始化字体画笔:

初始化完成以后,开始测量该view的宽高的,重写onMeasure(int widthMeasureSpec, int heightMeasureSpec) 方法:

代码解释:

首先获得模式跟&#;(系统默认)

如果模式是 MeasureSpec.EXACTLY 那么也就是说你已经设置了Layout_width,height为准确的数&#;或者是match_parent 否则 则按照bitmap的大小作为该view的大小最后把你测量好的&#;设上去 setMeasuredDimension(width, height);

测量好View的宽高之后顺便把bitmap也测量了:

代码解释: 获得宽高最短的一边作为标准:如果bitmap宽大于控件的宽 或者 高大于控件的高 则直接按照控件最小的边做缩放

这么一来我们的bitmap宽高也设置好了(默认或者按照以上做缩放)

好了就画出来呗 对吧 ^_^

Android自定义带消息提醒控件(android 自定义)

咋画? 重写onDraw(Canvas canvas)方法呗

我们先把目光放在drawBitmap(Canvas canvas)方法上,很简单:

虽然简单 也解释一下吧。。

首先测量该bitmap要画在哪个位置 (刚刚的是测量大小哦 现在才是画到View里面去哦)

首先测量该bitmap到底要画在什么位置(我这里是居中), 所以要测量出左边相当于控件来说是什么位置 上边相对于控件来说是什么位置 因为我们刚刚已经测量了bitmap的宽高 所以下边右边就直接按照bitmap的高 宽来确定了

如果要居中 左边当然就是: 控件的宽/2-bitmap的宽/2 (不懂的拿笔拿纸算一下,数学分表示这点数学题完全没难度,)

那么上边呢? 如法炮制,控件的高/2-bitmap的高/2 (同上)

最后用canvas.drawBItmap(Bitmap src,int left,int top,Paint paint)画出位图,至于最后一个为什么是Null? 小弟学艺不精 只知道null也能画出bitmap就对了^_^

好了 这么一来图片总算画好了

然后再来画我们的标记, 标记这个东西嘛。。我这里是一个红色圆 其他的形状思路也是一样的,先来讲讲思路吧

Q1 这个圆的面积是多大(重点 直接影响体验)

Q2 这个圆是啥颜色 (easy 上面不是有个标记画笔么)

Q3 这个圆在什么位置(重点 算一下就好了)

那么下面我们一个一个来解决:

A1:

圆的面积=x; x=piR平方对吧 Java已经提供了Pi 我们只要算r=多少就ok了。

好几种写法 可以写死 比如圆是整个面积的分1 8分1什么的 我一开始也是这样写的 看着还可以 但是这写法嘛 好像不太灵活 万一大小不喜欢还tm要去改源码?不干,果断不干。 所以我在自定义属性的xml里加了一个badgeRadio属性 也就是可以自己动态设置面积 其实也就是半径拉 那么这个半径如何算呢,这里以圆的面积是位图总面积的%为例:

其中badgeRadio=0.3totalArea 总面积=位图的总面积 正方形的面积不用说了吧。。w * h

半径: 公式:pi*r²=位图w*h*0.3 那么r²=w*h*0.3/pi 那么r=开根号前者

r就出来了 r出来了就tm好办了 直接画圆就好了

等等 这圆该画在什么位置。。。。

嗯对 下面就来解决这个问题

在自定义属性里面我们看到了一个bradePosition来设置圆到底在哪 分别是中间 左上 左中 左下,右上,右中,右下,顶中,底中,那么我们就来算这些位置

获得半径 判断位置 画出来 圆的位置一旦出来了 字体的位置自然也就出来了 在圆的中间嘛 算法跟刚的位图一样的

那么这个自定义view貌&#;就已经全部出来了亲,图 标记 标记里面的字体 都出来了。下面就向外公布一些方法能设置所需属性就ok了 就不贴出来了

不过这里有一个 setPosition的时候 你总不能要人家setPosition(1),setPosition(2)这样吧 &#;知道代表啥阿,所以我这里写了个枚举来表达 更直观一些

没啥难点 枚举的赋&#; 百度一下成吨

效果图

源码传送门

版权声明:本文为博主原创文章,未经博主允许不得转载。

安卓SDK文件目录 1.add-ons附加组件,存放关于google附加的API,如googlemap、effects2.build-tools构建工具,包含了重要的编译工具,比如aapt打包工具、aidlandroid内部进程通信接口

[安卓]新闻客户端(一)Splash 这里主要是一个图片实现的动画,并且需要有一个SharedPreferences,并抽成一个工具,来判断是否第一次进入,第一次进入先进入引导页再进入主页布局Rel

[安卓]新闻客户端(二)引导页 引导页是第一次进APP才有的,他的效果是左右滑动几张图片,展现一些功能之类的,最后一张图片应该有个button,点击后计入主页面,同时在页面下部

标签: android 自定义

本文链接地址:https://www.jiuchutong.com/biancheng/370889.html 转载请保留说明!

上一篇:view组件draw,onDraw,dispatchDraw(view组件属性)

下一篇:安卓SDK文件目录(安卓sdk目录下用来存放各种版本sdk的目录是)

  • 企业重组的特殊性税务处理比例
  • 公司代扣个人所得税有完税凭证明
  • 营销活动,单位让现场观众抽现金奖如何入账?
  • 个人所得税六项专项附加扣除是什么
  • 增值税 抵扣联
  • 市场营销策划开题报告
  • 房地产开发商需要缴纳什么税
  • 做账一定要银行对账单吗
  • 一般纳税人快递费税率
  • 电梯生产设备
  • 关联交易所得税规定
  • 金融企业往来收入科目属于什么科
  • 收回已确认的坏账的应收账款
  • 技术转让费为什么那么贵
  • 公司办公室收到上级主管部门的一份
  • 会计上的未达账项是什么
  • 企业出租设备取得租金收入要交增值税吗
  • 增值税可以抵扣企业所得税吗
  • 非独立核算的分公司是法人主体吗
  • 城建税和教育费附加的计税依据是什么
  • 进项税额转出报税填哪个表
  • 关于进项税额转出的规定
  • 个人生产经营所得
  • 企业股权设计咨询这个行业怎么样
  • 事业单位的增值税科目
  • 进料加工料件需补税的情况
  • 减少其他应付款冲费用做以前年度损益调整如何做分录
  • 安全生产费怎么算
  • 库存现金的收支账务处理
  • 员工迟到扣工资的会计处理
  • 无法查明原因现金盘盈计入什么科目
  • 怎么在电脑上设置输入法
  • 土地使用税从价和从租计算有区别吗
  • frameworkservic.exe是什么进程 有什么作用 frameworkservic进程查询
  • 公司被收购后所需资金
  • 消费税的计税方法有
  • ecap.exe是什么意思
  • php字符串转浮点型
  • 会计分录的基本构成要素
  • 装修材料如何入账
  • 自制生产设备领用原材料按照什么确认收入
  • 邮件发送错误怎么解释
  • 国际货运代理存在的必要性有哪些方面
  • 增值税进项税额能不能抵扣
  • 集团公司内部结算
  • phpcms默认密码
  • 织梦cms怎么样
  • 小微企业材料
  • 税务新法规
  • 土地使用税是新征税吗
  • 发放福利视同销售进项税要转出吗?
  • 房地产开发公司注册条件
  • 员工备用金会计分录
  • 上年度漏提折旧
  • 未交增值税账务处理
  • 做好年底冲刺
  • 冲减备用金什么意思
  • 临时建筑房
  • 分期收款销售的会计与纳税处理
  • 小规模纳税人开专票税率是多少?
  • 未开票收入如何记账
  • 税金及附加是什么账户
  • 实收资本会变吗?
  • mysql添加外键约束的sql语句
  • eac.exe是什么
  • myminer.exe是什么
  • win7系统网络连接禁用怎么开启
  • linux服务器安全配置
  • javascript运用
  • 很实用的话
  • android快捷键设置
  • jquery ztree实现树的搜索功能
  • android客户端与服务器通信
  • 2020年上海税务跨区迁移很麻烦吗
  • 课题研究经费预算一般多少比较合适
  • 四川十大纳税企业
  • 浙江职称评审网址官网
  • 山东省地方税务局印花税核定征收管理办法
  • 草原补偿标准
  • 财务公司怎么做
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设