Android怎样实现左上角倾斜的标签效果
创始人
2024-12-23 05:22:04
0次

实现的思路大致如下图:

主页面的布局结构如下:

            

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

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);  }}

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...