Android笔记---实现简单的左上角(其他边角)倾斜的标签(环绕效果)

Android实现在图片左上角或右上角显示文字标签.rar Android实现在图片左上角或右上角显示文字标签,相信这个功能大家以前肯定见到过,只是不知道如何形容这个功能,本实例还可实现调整标签文字的大孝标签与图片边角的距离、修改标签文字和标签背景颜色、标签宽度和方向以及图片圆角的大小等。 立即下载
  • 先上效果图吧

在这里插入图片描述

由于项目需要实现这种左上角倾斜环绕的标签效果,所以自己尝试着做一做,并记录下来。

实现的思路大致如下图:

在这里插入图片描述

主页面的布局结构如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:background="#fff"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="300dp"
        android:layout_height="200dp"
        android:background="#fff"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" >
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:background="#33B7F3"
            android:elevation="2dp"></RelativeLayout>
        <com.zc.labeldemo.LabelView
            android:id="@+id/labelView"
            android:layout_alignParentTop="true"
            android:layout_width="75dp"
            android:elevation="3dp"
            android:layout_height="75dp"/>
    </RelativeLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

绘制倾斜标签的代码如下:

package com.zc.labeldemo;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.View;

import androidx.annotation.Nullable;

/**
 * @author wenchao
 * @version 1.0.1
 * @className LabelView
 * @date 2019/9/20
 * @description
 */
public class LabelView extends View {
    /**
     * 画笔
     */
    private Paint paint;
    /**
     * Path
     */
    private Path path;
    /**
     * View宽度
     */
    private float width;
    /**
     * View高度
     */
    private float height;
    /**
     * 标签背景宽度
     */
    private float labelWidth;
    /**
     * 标签折叠区域宽度
     */
    private float pointWidth;
    /**
     * 标签折叠区域高度
     */
    private float pointHeight;
    /**
     * 标签背景颜色
     */
    private int labelColor;
    /**
     * 标签折叠区域背景颜色
     */
    private int pointColor;
    /**
     * 中心点x坐标
     */
    private float centerX;
    /**
     * 中心点y坐标
     */
    private float centerY;
    /**
     * 标签文字内容
     */
    private String text;
    /**
     * 标签文字颜色
     */
    private int textColor;
    public LabelView(Context context) {
        super(context);
    }

    public LabelView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        labelWidth = 120;
        pointWidth = 10;
        pointHeight = 17;
        paint = new Paint();
        path = new Path();
        paint.setAntiAlias(true);
        paint.setStrokeWidth(10);
        setBackgroundColor(Color.TRANSPARENT);
        labelColor = Color.parseColor("#EA6724");
        pointColor = Color.parseColor("#C43200");
        text = "测试内容";
        textColor = Color.WHITE;
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        width = w;
        height = h;
        centerX = w/2;
        centerY = h/2;
    }

    @Override
    public void draw(Canvas canvas) {
        super.draw(canvas);
        //画标签区域背景上边的折叠区域(小三角区域)
        path.reset();
        path.moveTo(width-pointWidth,0);
        path.lineTo(width,pointHeight);
        path.lineTo(width-pointWidth-26,pointHeight);
        path.close();
        paint.setColor(pointColor);
        canvas.drawPath(path,paint);

        //画标签背景区域下边的折叠区域
        path.reset();
        path.moveTo(0,height-pointWidth);
        path.lineTo(pointHeight,height);
        path.lineTo(pointHeight,height-pointWidth-26);
        path.close();
        paint.setColor(pointColor);
        canvas.drawPath(path,paint);

        //画标签背景区域
        path.reset();
        paint.setColor(labelColor);
        paint.setStyle(Paint.Style.FILL);
        path.moveTo(width-labelWidth-pointWidth,0);
        path.lineTo(width-pointWidth,0);
        path.lineTo(0,height-pointWidth);
        path.lineTo(0,height-labelWidth-pointWidth);
        canvas.drawPath(path,paint);

        //画文字  逆时针选择45度
        canvas.rotate(-45,centerX,centerY);
        //文字中心点横坐标
        float textX = width / 2;
        //文字中心点纵坐标
        float textY = (height-pointWidth-(labelWidth / 2f)) / 2f;
        paint.setColor(textColor);
        paint.setStyle(Paint.Style.FILL);
        paint.setTextSize(38);
        //设置文字居中绘制
        paint.setTextAlign(Paint.Align.CENTER);
        canvas.drawText(text,textX,textY,paint);


    }
}

这个标签实现应该是比较简单的,而且多嵌套一层布局会消耗一定的资源,这里先简单记录一下实现的思路,后期有时间再做更改优化。下面再贴一张其他边角的效果图吧:

在这里插入图片描述

Android 图片边角带标签tag Android 图片边角带标签tag [注意:本资源来自网络,如有侵权,请联系我删除,谢谢。] 立即下载

相关推荐

Android实现倾斜角标样式

最新小编接到这样一个项目,需要在一个距形卡片上做一个倾斜的Tag,类似支付宝上的一个功能,接着小编给大家带来了实现思路,对android 倾斜角标的实现方法感兴趣的朋友跟随小编一起看看吧

android 斜角标签BeveLabelView

android 斜角标签BeveLabelView 引入下面依赖 implementation 'com.github.poqiao:BeveLabelView:1.0.3' 可设置背景和文字颜色,文字大小,圆角大小,是否填满,上下左右位置 <com.mxq.pq.BeveLabelView android:layout_width="80d...

m0_37825988的博客 1180

Android实现左上角(其他边角)倾斜的标签(环绕效果)效果

先上效果图吧 由于项目需要实现这种左上角倾斜环绕的标签效果,所以自己尝试着做一做,并记录下来。 实现的思路大致如下图: 主页面的布局结构如下: <?xml version=1.0 encoding=utf-8?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android=http://schemas.android.com/apk/res/android xmlns:app=http://schemas.android.com/apk/res-auto xmlns:tools=http://

[Android]自定义图片左上角斜着的View

[Android]自定义图片左上角斜着的View@Author GQ 2016年07月25日 来自网上收集,一般在图片角上显示一排字,hot,new 等,可以自定义。原文github地址效果图Android自定义图片左上角斜着的View 效果图 AndroidStudio使用 使用1. AndroidStudio使用dependencies { compile 'com.haozhang.l

代码一挖一麻袋 1391

XMind文件解析黑科技:用Python实现版本自适应读取(兼容2010-2024)

本文深入探讨了如何利用Python实现XMind文件的版本自适应解析,兼容从2010到2024年的各版本。通过分析XMind文件作为ZIP压缩包的本质,文章提供了智能探测文件内部结构(JSON或XML)并构建健壮读取逻辑的完整方案,有效解决了版本兼容性难题,并演示了将解析数据转换为PlantUML等下游应用的实战案例。

weixin_29041767的博客 683

树莓派4B:控制步进电机

文章目录准备阶段接线阶段树莓派程序 准备阶段 准备以下物品,淘宝都可以买到: 57步进电机 电源开关(220v转24v,3A,72W) 步进电机驱动器 电源线 电线 杜邦线 树莓派4B一套 具体型号如下: 接线阶段 整体:接线效果如下图 电源开关起220v转24v作用,很好接线,输出24v接入步进电机驱动器 步进电机驱动器的 A+ A- B+ B- 按提示接步进电机四线,步进电机上就会有说...

学习路上的鸭子的博客 1万+

android+布局倾斜,Android中的倾斜或倾斜UI设计

您可以使用Canvas使用Slant top创建自定义视图,然后将其放在textView上,以实现此外观.Code snippet for slant top custom view :-public class SlantView extends View {private Context mContext;Paint paint ;Path path;public SlantView(Cont...

weixin_31438219的博客 666

【ZYNQ】OV5640 图像采集与显示

OV5640 是豪威(OmniVision)半导体公司推出的高性能的 CMOS 数字图像传感器,支持最高 500 万像素图像采集,支持 RAW RGB、RGB565、YCbCr422 等图像格式输出,可应用于手机、平板等电子设备。本文主要介绍如何使用 Zynq 驱动 OV5640 摄像头进行图像采集,并通过 HDMI 实时显示。

洋洋Young的博客 1433

【Android】界面布局之 LinearLayout(线性布局)

<br />  线性布局是程序中最常见的一种布局方式,线性布局可以分为水平线性布局和垂直线性布局两种,通过android:orientation属性可以设置线性布局的方向。下面是一个简单的线性布局的例子:<br />  <?xml version="1.0" encoding="utf-8"?><br />  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br />  android:orientation=

hgyin212314的专栏 1万+

MATLAB与ROS联合仿真——订阅ROS消息类功能模块介绍

MATLAB与ROS联合仿真——订阅ROS消息类功能模块介绍 (1)输入参数:无 (2)输出参数:Xr和Yr是小车当前在世界坐标系下的坐标 (3)主要作用:作为ROS与MATLAB的通讯接口,从ROS中订阅小车当前的位置信息,并输出 (4)内部结构: (5)具体实现过程:通过ROS工具箱中的Subscribe模块从ROS中订阅话题/gazebo/link_statesa 通过Bus Selector模块选择ROS总线中的Pose

慕羽★的博客 2699

lammps案例:聚乙烯和石墨烯界面pull out模拟

大家好,我是小马老师。 本文介绍lammps模拟计算界面结合力的一个案例。 本案例参考论文《The interfacial mechanical properties of functionalized graphene- polymer nanocomposites》,对论文作者表示感谢。 模型共分2层,上层为聚乙烯模型,下次为单层石墨烯,模拟过程共分3部分:建模、弛豫、拉伸。 (1)建模 使用MS建立聚乙烯和石墨烯模型,具体方法可参考之前的推文,使用build layer方法建立聚乙烯和石墨烯组合模型,

lammps_jiayou的博客 3495

android右上角标签,Android实现左上角(其他边角)倾斜的标签(环绕效果)效果...

先上效果图吧由于项目需要实现这种左上角倾斜环绕的标签效果,所以自己尝试着做一做,并记录下来。实现的思路大致如下图:主页面的布局结构如下:xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"...

weixin_29798379的博客 520

【Unity-UGUI控件全面解析】| Layout自动布局组件详解

UGUI中有个自动布局组件Auto Layout,主要包含下面几个模块(点击可进入官方文档下查看描述): 自动布局 布局元素 (Layout Element) 水平布局组 (Horizontal Layout Group) 垂直布局组 (Vertical Layout Group) 网格布局组 (Grid Layout Group) 内容大小适配器 (Content Size Fitter) 自动布局系统 基于布局元素和布局控制器的概念。一个布局元素是具有矩形变换以及其他可选组件的游戏对象。布局元素对自身

努力前行,总会成为自己心中的那道光 2万+

Android渐变色制作

Section1xml version="1.0" encoding="utf-8"?> shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android"> gradient android:startColor="@color/black"

perfectnihil的博客 458

栅极驱动电路设计(一)

SiC驱动电路设计需满足更高标准,重点包括:驱动电压需18~20V开通、-3~-5V关断;栅极电阻优选5~10Ω以平衡开关性能与可靠性;必须集成欠压保护(阈值11~15V)和快速短路保护。多电平驱动控制通过动态调节栅压和驱动强度优化性能,如前期弱驱动抑制振荡,后期强驱动降低损耗。以NCE120ED65VTP4为例,栅压从18V提升至20V可使导通损耗降低15%。相比传统方案,有源驱动(含数字分段和模拟闭环控制)能更灵活地提升开关速度与效率。

嵌入式老牛的博客 451

ABAP 后台作业里的消息机制:把 MESSAGE 写对,避免作业莫名取消

SAP后台作业消息处理机制解析 本文深入剖析了SAP系统中后台作业的消息处理机制,揭示了前台与后台执行环境的关键差异。核心发现包括: 后台作业对消息的处理规则: 所有消息写入Job log而不显示 根据消息类型决定是否继续执行 W警告在列表处理阶段会被自动转为E错误 关键异常处理: 通过error_message可捕获E/A类型消息 A类型消息会触发隐式数据库回滚 未被捕获的E/A消息将导致作业中断 实用解决方案: 将业务提示改为S或I类型 使用DISPLAY LIKE保持前台体验 通过error_mess

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2218

html图片倾斜标签,CSS3 信息卡片左上角的倾斜标签

CSS语言:CSSSCSS确定.new-item-badge {position: absolute;background: #92b7bd;z-index: 999;border-radius: 3px;color: #fff;font-size: 70%;padding: 2px 4px 0;top: -17px;left: -10px;line-height: 1.4;-ms-transfo...

weixin_35642637的博客 1143

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

android textview环绕,Android 文字环绕 图文混排 支持Span折叠

先直接上效果图上图为实现目标,实现了Android图文混排,文字环绕,支持Span的识别,表情的嵌入,支持文字字体大小的设置等。由于项目中需要用到图文混排技术,在此稍微研究了两天,出来一个效果还算不错的东西图文混排技术,在不少Android应用中都已经实现,说穿了其实就是两个TextView加一个ImageView的布局罢了,代码里面实现下String的剪切就可以了,不过我这里的这个除了要实现混...

weixin_34470566的博客 898

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android自定义View实现HTML图文环绕效果

Android中并没有提供HTML图文环绕效果的View,最接近的算是TextView中的ImageSpan了,但并未完全实现图文环绕(图文混排)的效果。 1、Android系统TextView的ImageSpan实现图文环绕 代码如下: 1 2 3 4 5 6 7 8 TextView tv = new TextView(this);

qjbagu的专栏 707

android文字动态环绕图片效果

目录 效果展示 代码分析 效果展示 代码分析 demo中的效果是手指拖动红色方块,文字自动排版,达到动态环绕的效果。 这里是通过继承View复写onDraw方法实现的。 package com.example.allen.flowtext; import android.content.Context; import android.graphics.Canvas; imp...

pciverson的专栏 1818

android xml画斜线,API返回XML引号通过反斜线

我有一个NetSuite“RESTlet”,就像一个REST端点。它接受来自电子商务网站的一些JSON。它解析出JSON,然后生成一些用于调用第三方运输API的XML。API返回XML引号通过反斜线我想在postman中测试出来,当我调用RESTlet时,无论它返回用双引号括起来的XML,它都用反斜杠转义引号。我相信这是我的RESTlet问题,因为我可以采用相同的XML,从字符串中删除反斜杠,然后...

weixin_34336068的博客 438

Android文字环绕效果

最近在考题系统上给每个题目增加一个单选、多选还是判断的一个标记的时候,遇到了点麻烦,现记录下来,以备不时之需,效果如下: 首先说明下,哪个类型的type不是图片,是个文字加一个背景图,我的实现方式也很简单,就是利用系统的SpannableStringBuilder,不过我这里偷懒了,使用一个别人封装好的工具,地址如下:https://github.com/binaryfork/Spanny,但是如

小码农的大世界 2557
上一篇: Flutter笔记---Flutter与Android之间的相互通信MethodChannel与EventChannel(小白教程)
下一篇: Android错误笔记---下载文件无法获取到文件(ContentLength)的大小
DearLC
博客等级 码龄10年 18粉丝 27原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值