自定义实现:头像上传View

 看看效果:

非常简单:代码直接贴在下面,有需要的直接带走


/*** 带有自定义字体TextView。*/
class EditAvatarUploadView : AppCompatTextView {lateinit var paint:Paintconstructor(context: Context) : this(context, null){iniPaint()}constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0){iniPaint()}constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {iniPaint()}override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {super.onLayout(changed, left, top, right, bottom)iniPaint()}private fun iniPaint() {paint = Paint()paint.setAntiAlias(true)paint.setColor(Color.LTGRAY)paint.setStyle(Paint.Style.STROKE)paint.textSize= 20F}override fun onDraw(canvas: Canvas?) {super.onDraw(canvas)//得到屏幕宽高var width = widthvar radius = width - 300 / 2var height = heightcanvas!!.drawCircle((width / 2).toFloat(), (height / 2).toFloat(), radius.toFloat(), paint)//绘制一条直线(两点确定一线)/* paint.setColor(Color.RED)canvas.drawLine(5F, (height/2+50).toFloat(), width.toFloat()-5, (height/2+50).toFloat(), paint)*/drawMask(canvas)drawCam(canvas)drawText(canvas)}fun drawMask(canvas: Canvas) {val bitmap =BitmapFactory.decodeResource(context.getResources(), R.mipmap.login_upload_half_mask)val dst = Rect(6, 60, 293, 160)/***********绘制圆弧* 矩形的宽度width=C(right)-A(left),高度height=D(bottom)-B(top)*/canvas.translate(0F, (width/2-10).toFloat())val rectf_head = RectF(1f, 0f, 291f, 207f) //确定外切矩形范围rectf_head.offset(5f, 90f) //使rectf_head所确定的矩形向右偏移100像素,向下偏移20像素//开始角度(以时钟3点的方向为0°,逆时针为正方向)//(以时钟3点的方向为0°,逆时针为正方向)//canvas.drawArc(rectf_head, 0F, 180F, false, paint) //绘制圆弧,不含圆心canvas.drawBitmap(bitmap, null, dst, null);}fun drawCam(canvas: Canvas) {val bitmap =BitmapFactory.decodeResource(context.getResources(), R.mipmap.login_edit_camera_icon)val dst = Rect(10, 60, 50, 100)dst.offset(70, 20)canvas.drawBitmap(bitmap, null, dst, null);}fun drawText(canvas: Canvas) {val text = "点击上传"paint.setColor(Color.WHITE)//x表示文本原点的x坐标;y表示文本基线的y坐标。canvas.drawText(text, 130F, 110F, paint)}}

 

代码地址 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/136149.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字符串函数和内存函数详解(1)

🐵本文将通过函数原型、用法、模拟实现等多个方面全面讲解字符串的库函数 1.strlen📚 1.1函数用法📗 strlen函数用来计算字符串的长度,它会从接收到字符的地址开始读取直到遇到\0,每读取一个非\0的字符长度1&#xff…

Harmony Codelab 样例—弹窗基本使用

一、介绍 本篇 Codelab 主要基于 dialog 和 button 组件,实现弹窗的几种自定义效果,具体效果有: 1. 警告弹窗,点击确认按钮弹窗关闭。 2. 确认弹窗,点击取消按钮或确认按钮,触发对应操作。 3. 加载…

Java基于SpringBoot的在线考试系统的研究与实现(附源码,教程)

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 第一章第二章.主要技术第三章第四章 系统设计4.1功能结构4.2 数据库设计4.2.1 数据库E/R图4.2.2 数…

数据变换:数据挖掘的准备工作之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…

《Python趣味工具》——自制emoji3

今日目标 在上次,我们绘制了静态的emoji图。并且总结了turtle中的常用函数。 本次我们将尝试制作一个动态的emoji,让你的表情包动起来! 文章目录 一、动画原理:二、制作动画:1. 修改eyes_black()函数:2. 绘…

软考和PMP哪个含金量更高?

软考中,能和pmp一起来比较的是软考高项,软考高级信息系统项目管理师,和PMP的共同点,基本来说都是项目管理类的证书。本质也都是适用于项目经理岗位的证书,软考高项中大部分考试内容是PMPIT技术两部分,其中项…

【STL容器】list

文章目录 一、list定义二、list的迭代器三、list的元素操作四&#xff0c;list的优缺点 一、list定义 list本质是一个双向带头循环链表 template<class T> struct list_node {list_node* prev;T val;list_node* next; };template<class T> class list {typedef lis…

如何打造可视化警务巡防通信解决方案

近年来&#xff0c;科学技术飞速发展&#xff0c;给予了犯罪分子可乘之机。当面临专业化的犯罪分子、高科技的犯罪手段&#xff0c;传统警务模式似乎不能满足警方打击犯罪的需要&#xff0c;因此当今公安工作迫切需要构建智能化、系统化、信息化的警务通信管理模式。 警务人员…

python 第一次作业

1.使用turtle换一个五环 2.设计这样一个程序&#xff1a;输入一个数字 判断它是不是一个质数 使用turtle换一个五环&#xff1a; >>> import turtle #导入模块 >>> turtle.width(10) #设置圆圈宽度 >>> turtle.color("blue&qu…

JDK10特性

文章目录 JAVA10概述语法层次的变化局部变量的类型推断不能使用类型推断的场景变量的声明初始值nulllambda表达式方法引用为数组静态初始化成员变量不能使用其他不可以的场景 API层次的变化集合的copyOf方法 总结 JAVA10概述 2018年3月21日&#xff0c;Oracle官方宣布JAVA10正…

HTML整站规划与规范

文章目录 命名规则命名命名书写 包含样式规范样式重置样式引入页面结构页面宽度页面高度与背景页面设计 网址图标 命名规则 命名 根据每块元素的主题、功能、页面上的位置命名&#xff0c;便于后期更改与维护。 另外&#xff1a;如果所有样式放在同一文件下&#xff0c;可以给…

BUUCTF:[GYCTF2020]FlaskApp

Flask的网站&#xff0c;这里的功能是Base64编码解码&#xff0c;并输出 并且是存在SSTI的 /hint 提示PIN码 既然提示PIN&#xff0c;那应该是开启了Debug模式的&#xff0c;解密栏那里随便输入点什么报错看看&#xff0c;直接报错了&#xff0c;并且该Flask开启了Debug模式&am…

qt自定义可删除标签控件、自适应布局

自定义标签&#xff0c;支持删除、设置/获取数据、自适应布局操作。 如图&#xff0c;可点击删除按钮操作、拖拽窗口自适应&#xff1b; 代码参考

21天学会C++:Day11----运算符重载

CSDN的uu们&#xff0c;大家好。这里是C入门的第十一讲。 座右铭&#xff1a;前路坎坷&#xff0c;披荆斩棘&#xff0c;扶摇直上。 博客主页&#xff1a; 姬如祎 收录专栏&#xff1a;C专题 目录 1. 知识引入 2. 运算符重载 2.1 operator<() 2.2 operator() 2.3 o…

Vue的详细教程--基础语法【上】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于Vue的相关操作吧 一.插值 1.文本 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>插值</title>&l…

python爬虫爬取电影数据并做可视化

思路&#xff1a; 1、发送请求&#xff0c;解析html里面的数据 2、保存到csv文件 3、数据处理 4、数据可视化 需要用到的库&#xff1a; import requests,csv #请求库和保存库 import pandas as pd #读取csv文件以及操作数据 from lxml import etree #解析html库 from …

element 搜索框静态查询

效果图 代码块 <template><div><!-- 1.产品搜索 --><div class"header"><div class"from"><el-form :inline"true" :model"formInline" class"demo-form-inline"><el-form-item l…

Vue复选框批量删除示例

Vue复选框批量删除 通过使用v-model指令绑定单个复选框 例如<input type"checkbox" id"checkbox" v-model"checked"> 而本次我们要做的示例大致是这样的&#xff0c;首先可以增加内容&#xff0c;然后通过勾选来进行单独或者批量删除&…

[计算机入门] 电源选项设置

3.10 电源选项设置 有时候我们的电脑一段时间没有用&#xff0c;会自己关掉屏幕或者直接睡眠&#xff0c;这是电源选项没有设置好导致的。 1、打开控制面板&#xff0c;打开其中的电源选项 2、点击左侧上方的选择关闭显示器的时间 3、进入到编辑计划设置界面&#xff0c;在…

【Vue】MVVM模型还没懂嘛

hello&#xff0c;我是小索奇&#xff0c;精心制作的Vue教程持续更新哈&#xff0c;想要学习&巩固&避坑就一起学习叭~ MVVM 模型 Vue虽然没有完全遵循MVVM模型&#xff0c;但Vue的设计也收到了它的启发在文档中也会使用VM&#xff08;ViewModel的缩写&#xff09;这个变…