Android MarkTipsView文字标识控件使用方法

本文实例为大家分享了Android MarkTipsView文字标识控件的具体代码,供大家参考,具体内容如下

效果预览

使用

使用方式跟TextView使用方式一样,背景设置直接setBackgroundColor

源码:

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.RectF;
import android.util.AttributeSet;

import androidx.appcompat.widget.AppCompatTextView;

/**
 * 绘制mark标注
 */
public class MarkTipsView extends AppCompatTextView {

    /**
     * 画笔
     */
    private Paint paint;
    /**
     * 宽度
     */
    private int width;
    /**
     * 高度
     */
    private int height;
    /**
     * 标识宽度
     */
    private int markWidth = 12;
    /**
     * 标识高度
     */
    private int markHeight = 12;
    /**
     * 圆角大小
     */
    private float radius = 10;
    /**
     * 填充颜色
     */
    private int solid = Color.parseColor("#F1AA44");

    public MarkTipsView(Context context) {
        super(context);
        initAttributeSet(context, null);
    }

    public MarkTipsView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initAttributeSet(context, attrs);
    }

    public MarkTipsView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initAttributeSet(context, attrs);
    }

    private void initAttributeSet(Context context, AttributeSet attrs) {
        paint = new Paint();
        paint.setDither(true);
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.FILL);
        TypedArray array = context.obtainStyledAttributes(attrs,new int[]{android.R.attr.background});
        solid =  array.getInt(0,solid);
        array.recycle();
    }

    @Override
    public void setBackgroundColor(int color) {
        solid = color;
        invalidate();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        width = getMeasuredWidth();
        height = getMeasuredHeight();
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        setPadding(getPaddingLeft(), getPaddingTop(), getPaddingRight(), getPaddingBottom() + markHeight);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        paint.setColor(solid);
        //矩形
        Path path = new Path();
        RectF rect = new RectF(0, 0, width, height - markHeight);
        path.addRoundRect(rect, radius, radius, Path.Direction.CCW);
        //三角形
        Path onePath = new Path();
        onePath.lineTo(width / 2 - markWidth, rect.height());
        onePath.lineTo(width / 2, height);
        onePath.lineTo(width / 2 + markWidth, rect.height());
        onePath.close();
        path.addPath(onePath);
        //绘制路径
        canvas.drawPath(path, paint);
        super.onDraw(canvas);
        //重绘文字
        setText(getText());
    }

    /**
     * 获取底部标识箭头高度
     * @return
     */
    public int getMarkHeight() {
        return markHeight;
    }

    /**
     * 设置底部标识箭头高度
     * @param markHeight
     */
    public void setMarkHeight(int markHeight) {
        this.markHeight = markHeight;
        invalidate();
    }

    /**
     * 获取底部标识箭头宽度
     * @return
     */
    public int getMarkWidth() {
        return markWidth;
    }

    /**
     * 设置底部标识箭头宽度
     * @param markWidth
     */
    public void setMarkWidth(int markWidth) {
        this.markWidth = markWidth;
        invalidate();
    }

    /**
     * 获取圆角大小
     * @return
     */
    public float getRadius() {
        return radius;
    }

    /**
     * 设置圆角大小
     * @param radius
     */
    public void setRadius(float radius) {
        this.radius = radius;
        invalidate();
    }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android 实现带头部文字输入框的自定义控件

    前言 在app的输入框中,需要应用到很多带有前缀说明的输入框,运用原有的输入框和文本控件,一个带头部的输入框就会增加三个控件在layout文件中.当布局文件输入框较少的情况下,这样对后期维护影响不大,但在多个带头部的输入框下,布局文件代码量会很大,影响阅读以及后期维护.而封装过后的控件,在使用中仅仅需要几行代码可实现几十行的效果. 简介 带头部文字的输入框 可在xml定义头部文字样式 可在xml定义输入框样式 可在xml定义提示文字样式 可在xml定义头部和输入框的间距和边距 效果图 使用方法

  • Android自定义控件实现icon+文字的多种效果

    今天给大家带来一个很简单但是很常用的控件ButtonExtendM,在开发中我们经常会用到图片加文字的组合控件,像这样: 以上图片都是从微信上截取的.(暂时没有找到icon在下,文字在上的例子) 下面我们通过一个控件来实现上下左右全部的样式,只需改动一个属性值即可改变icon的位置,是不是很方便,先看下demo效果图: 没错上图的三种不同的样式都是通过同一个控件实现的,下面我们看下代码 第一步 自定义属性  在res/values/目录下新建attrs.xml文件, 添加如下属性 <attr n

  • Android手机开发 控件 TextView文字居中

    有2种方法可以设置TextView文字居中: 一:在xml文件设置:Android:gravity="center" 二:在程序中设置:txtTitle.setGravity(Gravity.CENTER); 设置控件居中: android:layout_gravity="center"是对textview控件在整个布局中居中,也可以在其父layout中调用设置android:gravity="center" 程序中也是需要设置其所在控件的父la

  • Android 自定义控件实现显示文字的功能

    Android 自定义控件实现显示文字的功能 自定义控件-–逐个显示文字 ONE Goal ,ONE Passion ! 前言: 今天要实现的效果时.让我们的文字一个一个显示出来.上效果图吧: 实现原理: 1,拿到要显示的文字. 2,计算文字显示的速率 字体显示的速度 v = 总的字体长度 / 总的显示时间 3,将文字根据速率显示到控件上. 自定义View: public class printTextView extends TextView { /** * 字体显示出来的时间 */ priv

  • Android MarkTipsView文字标识控件使用方法

    本文实例为大家分享了Android MarkTipsView文字标识控件的具体代码,供大家参考,具体内容如下 效果预览 使用 使用方式跟TextView使用方式一样,背景设置直接setBackgroundColor 源码: import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; impo

  • Android省市区三级联动控件使用方法实例讲解

    最近有需求需要实现省市区三级联动,但是发现之前的实现不够灵活,自己做了一些优化.为了方便以后使用,抽离出来放在了github上WheelView.同时把其核心库放在了JCenter中了,可以直接引用.也可以参考项目中的Demo进行引用 下面介绍一下如何使用 如果用的是AndroidStudio那么直接在build.gradle文件中添加依赖: dependencies { compile 'chuck.WheelItemView:library:1.0.1' } 成功引入库之后,可以在需要弹出省

  • Android PickerScrollView滑动选择控件使用方法详解

    本文实例为大家分享了Android PickerScrollView滑动选择控件的具体使用代码,供大家参考,具体内容如下 先看一下效果图 1.SelectBean模拟假数据 public class SelectBean {       /**      * ret : 0      * msg : succes      * datas : [{"ID":"0","categoryName":"本人","state

  • Android实现水波纹控件的方法

    有很多app使用过水波纹的这样的效果,看着很酷酷的样子,所以自己就撸码写了一个. 实现思路: 利用贝塞尔曲线绘制圆弧(也就是水波的波纹) 通过动画改变绘制的起始点使水波纹平移 首先,定义我们需要的自定义属性. <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="waveStyleable"> <!-- 水波

  • Android显示全文折叠控件使用方法详解

    一般列表里文字太多的一个折叠效果的空间,效果图如下. 当文字超过设定的行数后就折叠,小于设定行数不显示展开按钮.下面上代码. 先看布局文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap

  • Android图文居中显示控件使用方法详解

    最近项目中用到了文字图标的按钮,需要居中显示,如果用TextView实现的方式,必须同时设置padding和drawablePadding.如下: <androidx.appcompat.widget.AppCompatTextView android:layout_width="200dp" android:layout_height="wrap_content" android:drawableLeft="@drawable/ic_xxx&quo

  • Android滑动拼图验证码控件使用方法详解

    简介: 很多软件为了安全防止恶意攻击,会在登录/注册时进行人机验证,常见的人机验证方式有:谷歌点击复选框进行验证,输入验证码验证,短信验证码,语音验证,文字按顺序选择在图片上点击,滑动拼图验证等. 效果图: 代码实现: 1.滑块视图类:SlideImageView.java.实现随机选取拼图位置,对拼图位置进行验证等功能. public class SlideImageView extends View { Bitmap bitmap; Bitmap drawBitmap; Bitmap ver

  • Android动态添加设置布局与控件的方法

    本文实例讲述了Android动态添加设置布局与控件的方法.分享给大家供大家参考,具体如下: 有时候我们会在代码端,动态的设置,添加布局和控件.下面我们就看来看一下如何处理,直接上代码,代码里面的注解很清楚了. 布局文件:fragment_hot.xml 说明:这个部局,我用的是scrollView做为基础布局,主要是为了实现一个滚动.这里不多说,这个你可以使用任何布局都可以,这里的id我是提前定义的. 这里面的现在有的布局是我为了看到我在代码端,动态添加的代码,是否可以追加到现有布局的后面而加上

  • Android拆轮子系列之写验证码控件的方法

    前言 先看看效果 怎么样不错吧?别急下面我就一步一步的教你实现. 用到的知识点总结: 1.Canvas和pint的使用,我们用它画点,线,字 2.View的基本用法 其实做这个东西还是很简单的,总体思路步骤如下: 1.准备一个Canvas. 2.向Canvas里面画几条斜杠. 3.向canvas里面画100个小点. 4.随机生成4个数字,然后画在canvas里面. 其实就是这么简单,没什么深奥的. 开始写编码 1.首先我们要重写View 既然我们要画验证码,那么我们就需要准备画笔(paint)和

  • Android中CheckBox复选框控件使用方法详解

    CheckBox复选框控件使用方法,具体内容如下 一.简介 1. 2.类结构图 二.CheckBox复选框控件使用方法 这里是使用java代码在LinearLayout里面添加控件 1.新建LinearLayout布局 2.建立CheckBox的XML的Layout文件 3.通过View.inflate()方法创建CheckBox CheckBox checkBox=(CheckBox) View.inflate(this, R.layout.checkbox, null); 4.通过Linea

随机推荐