自定义实现:头像上传View

news2024/9/28 17:27:01

 看看效果:

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


/**
 * 带有自定义字体TextView。
 */
class EditAvatarUploadView : AppCompatTextView {
    lateinit var paint:Paint

    constructor(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 = width
        var radius = width - 300 / 2
        var height = height


        canvas!!.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.coloradmin.cn/o/1025949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

广告电商:一种新型的电商模式

电商行业是一个竞争激烈的领域,要想在这个领域中脱颖而出,就需要不断创新和变革。广告电商就是一种新型的电商模式,它结合了社交电商和广告分佣的优势,让消费者在购物的同时可以获得积分,并且还能通过观看平台对接的广…

【ES6】

ES6 1 ES6简介1.1 什么是ES61.2 为什么使用ES6 2 ES6的新增语法2.1 let2.2 const2.3 let、const、var的区别2.4 解构赋值2.4.1 数组解构2.4.2 对象解构 2.5 箭头函数2.6 剩余参数 3 ES6的内置对象扩展3.1 Array的扩展方法3.1.1 扩展运算符(展开语法)3.1.2 构造函数方法&#xf…

开启潮玩文化新篇章,泡泡玛特首届海外PTS潮玩成功落地新加坡

近日,泡泡玛特2023 PTS潮流玩具展(下简称新加坡PTS)在新加坡滨海湾金沙成功举办,本届潮玩展主题为“Back to Play in the Garden City”,现场人气爆棚,三天吸引了超过2万观众入场,这也是泡泡玛特…

Hadoop源码阅读(三):HDFS上传

说明: 1.Hadoop版本:3.1.3 2.阅读工具:IDEA 2023.1.2 3.源码获取:Index of /dist/hadoop/core/hadoop-3.1.3 (apache.org) 4.工程导入:下载源码之后得到 hadoop-3.1.3-src.tar.gz 压缩包,在当前目录打开Pow…

【计算机网络】 拥塞控制

文章目录 背景TCP的四种拥塞控制算法慢开始与拥塞避免:快重传:快恢复: 流量控制和拥塞控制本质上的 区别 背景 网络中的链路容量和交换节点中的缓存和处理机都有着工作的极限,当网络的需求超过他们的工作极限时,就出现…

电脑回收站为什么自动清空?win10回收站自动清理的东西怎么找回

“很奇怪,我昨天才删除的文件,但是今天回收站中啥也没有了。难道win10回收站是自动清空的吗??请问如何恢复这些文件呢?” ——您是否曾经遇到过回收站自动清空的情况?您是如何处理的呢?下面为大…

爬虫 — Js 逆向案例一英汉互译

目标网站:https://fanyi.baidu.com/ 需求:实现英汉互译 案例分析 1、分析网站加载方式 动态加载,目标 url:https://fanyi.baidu.com/v2transapi?fromen&tozh 2、分析请求方式 post(携带 data 参数&#xff09…

功率放大器的特点是什么

功率放大器是电子系统中常见的一种设备,其主要功能是将低功率输入信号放大为高功率的信号输出。功率放大器具有多种特点,下面西安安泰电子将详细介绍功率放大器的几个主要特点。 功率放大器的一个主要特点是高功率输出。与信号放大器相比,功率…

Pytorch 深度学习实践 day01(背景)

准备 线性代数,概率论与数理统计,Python理解随机变量和分布之间的关系 人类智能和人工智能 人类智能分为推理和预测 推理:通过外界信息的输入,来进行的推测 预测:例如,看到一个真实世界的实体&#xff…

windows 电脑改成安卓桌面

windows电脑改造为类安卓的操作逻辑,适用于触摸屏windows系统。主要操作逻辑见下面图片列表: 桌面主页面 侧边工具栏 工具栏里有一些常用小工具 打开首页的应用(edge浏览器) 查看我的所有应用

2023年9月20日

画个钟 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPaintEvent> #include <QDebug> #include <QPainter> #include <QTimerEvent> #include <QTime> #include <QDateTime> #include <…

ChatGLM 大模型炼丹手册-理论篇

序言一)大还丹的崛起 在修真界,人们一直渴望拥有一种神奇的「万能型丹药」,可包治百病。 但遗憾的是,在很长的一段时间里,炼丹师们只能对症炼药。每一枚丹药,都是特效药,专治一种病。这样就导致,每遇到一个新的问题,都需要针对性的炼制,炼丹师们苦不堪言,修真者们吐…

渗透测试——formatworld(1)

文章目录 一、环境二、获取flag11、扫描局域网内存活主机1.1 查看kali的IP地址1.2 扫描存活主机 2、粗略扫描靶机端口&#xff08;服务&#xff09;3、寻找ftp服务漏洞4、扫描端口详细信息5、匿名登录ftp 一、环境 攻击机&#xff1a;kali 靶机&#xff1a;formatworld 二、获…

transformer系列1---Attention Is All You Need全文详细翻译

论文链接&#xff1a;Attention Is All You Need. 代码链接&#xff1a;Transformer. Transformer 0 Abstract 摘要1 Introduction 引言2 background 背景3 Model Architecture模型架构3.2 Attention注意力3.2.1 Scaled Dot-Product Attention缩放点积注意力3.2.2 Multi-Head …

idea设置gradle

1、不选中 2、下面选specified location 指定gradle目录

IDEA 启动 java web 老项目

背景&#xff1a;一套 java web 老代码&#xff0c;使用 eclipse 工具开发。内网&#xff0c;无 eclipse 开发工具&#xff0c;只有 IDEA。 代码目录结构如下&#xff1a; demo/.settings/* demo/src/com/demo/controller/* demo/webapp/js/* demo/webapp/jsp/* demo/webapp/M…

realloc

目录 前提须知&#xff1a; 函数介绍&#xff1a; 函数原型&#xff1a; 使用realloc&#xff1a; realloc在调整内存空间的是存在两种情况/使用realloc为扩大空间的两种情况 1.是剩下的没有被分配的空间足够 2 .剩下没有被分配的空间不够了 注意事项&#xff1a; rea…

普中51-矩阵按键

矩阵按键 原理图如下&#xff1a; 行列扫描 行列扫描法检测时&#xff0c;先送一列为低电平&#xff0c;其余几列全为高电平(此时我们确 定了列数)&#xff0c;然后立即轮流检测一次各行是否有低电平&#xff0c;若检测到某一行为低电 平(这时我们又确定了行数)&#xff0c;…

巨人互动|Facebook海外户Facebook的特点优势

Facebook作为全球最大的社交媒体平台之一&#xff0c;同时也是最受欢迎的社交网站之一&#xff0c;Facebook具有许多独特的特点和优势。本文小编将说一些关于Facebook的特点及优势。 1、全球化 Facebook拥有数十亿的全球用户&#xff0c;覆盖了几乎所有国家和地区。这使得人们…

Unity用相机实现的镜子效果

首先登场 场景中的元素 mirror是镜子&#xff0c;挂着我们的脚本&#xff0c;Quad是一个面片。Camera是用来生成RenderTexture给面片的。里面的test1是我用来调试位置的球。 镜子size是大小&#xff0c;x是-2&#xff0c;为了反转一下贴图 相机直接可以禁用掉&#xff0c;用…