转载请注明出处:王亟亟的大牛之路

P1:这部分为废话技术内容在P2,不想看的可跳过

最近每天都是在照顾鱼,麦麦,当当之间游离回家几乎没学习,没敲代码,或者说没开工作电脑,慢慢的罪恶感,贴两张周末小朋友们玩耍的照片

但是生活还是很重要的,不能让自己成为赚钱的工具,毕竟赚的不多。。。那如果赚的不多,那更要过的开心了。青春啊!!!


P2 今天介绍的是一个国内小伙伴的一个标签库,这一类的实现之前也有写过,但是还是推荐下这位大牛的,理由? 因为看得舒服。

效果图:


How to use?

大牛没有做Gradle的依赖,那我们就不分AS和EC了,都把代码Copy进去就行了,东西很少,一个类+一点资源文件就好了。

像这样:

看下怎么使用

 <me.corer.labelview.LabelViewapp:num="20:00"app:text="晚场"app:numStyle="italic"app:numSize="14sp"app:textSize="9sp"app:direction="leftTop"app:labelTopPadding="15dp"app:labelCenterPadding="5dp"app:labelBottomPadding="10dp"app:backgroundColor="@color/colorPrimaryDark"android:layout_marginTop="@dimen/activity_vertical_margin"android:layout_width="wrap_content"android:layout_height="wrap_content"/>

原作者没有给控件整那些set方法(至少没有整全),只有setNum 和setText之类的所以就直接在XML里捯饬吧。

因为这个控件是作为一个独立的组织实现,并未作为一个ImageView之类的一部分,所以使用的时候盖在你所需要标示的控件上面就行了,位置的话就自己设置就行了。

简单的拆一下代码,讲一下实现流程(适用于新手模仿)

首先,他是一个基础的View,并不是继承于别的“高级”控件,单纯的画出来的

public class LabelView extends View

然后默认是 一个 等边直角三角形的样子角度如下

public static final int DEGREES_LEFT=-45;
public static final int DEGREES_RIGHT=45;

在构造函数中初始化一系列尺寸啊,颜色啊什么的属性。

 public LabelView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.LabelTextView);mTopPadding = ta.getDimension(R.styleable.LabelTextView_labelTopPadding, dp2px(7));mCenterPadding = ta.getDimension(R.styleable.LabelTextView_labelCenterPadding, dp2px(3));mBottomPadding = ta.getDimension(R.styleable.LabelTextView_labelBottomPadding, dp2px(3));mBackGroundColor=ta.getColor(R.styleable.LabelTextView_backgroundColor, Color.parseColor("#66000000"));mTextColor=ta.getColor(R.styleable.LabelTextView_textColor, Color.WHITE);mNumColor=ta.getColor(R.styleable.LabelTextView_numColor, Color.WHITE);mTextSize=ta.getDimension(R.styleable.LabelTextView_textSize,sp2px(8));mNumSize=ta.getDimension(R.styleable.LabelTextView_numSize,sp2px(11));mText=ta.getString(R.styleable.LabelTextView_text);mNum=ta.getString(R.styleable.LabelTextView_num);mTextStyle=ta.getInt(R.styleable.LabelTextView_textStyle,0);mNumStyle=ta.getInt(R.styleable.LabelTextView_numStyle,2);mDegrees = ta.getInt(R.styleable.LabelTextView_direction, 45);ta.recycle();initTextPaint();initNumPaint();initTrianglePaint();resetTextStatus();resetNumStatus();}

里面调用的方法都是些初始化的操作,就不说了。

我们先来说下控制大小的方法。

@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);height = (int) (mTopPadding + mCenterPadding + mBottomPadding + mTextHeight + mNumHeight);width = 2 * height;//控件的真正高度,勾股定理...int realHeight= (int) (height * Math.sqrt(2));setMeasuredDimension(width,realHeight);}

首先计算出个个尺寸(间距,大小什么的)的大小,然后勾股定理一下就OK了。

再是具体绘制的操作

 @Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.save();//位移和旋转canvascanvas.translate(0, (float) ((height * Math.sqrt(2)) - height));if (mDegrees==DEGREES_LEFT){canvas.rotate(mDegrees, 0, height);}else if (mDegrees==DEGREES_RIGHT){canvas.rotate(mDegrees, width, height);}//绘制三角形背景Path path = new Path();path.moveTo(0, height);path.lineTo(width / 2, 0);path.lineTo(width, height);path.close();canvas.drawPath(path, mTrianglePaint);//绘制修饰文本canvas.drawText(mText, (width) / 2, mTopPadding + mTextHeight, mTextPaint);//绘制数字文本canvas.drawText(mNum, (width) / 2, (mTopPadding + mTextHeight + mCenterPadding + mNumHeight), mNumPaint);canvas.restore();}

先根据参数旋转画布,然后画三角形的背景,就是一条线一条线一条线 BingGo合成三角形啦 然后填充颜色就好了,在之后就是画文字,画数字,都是根据xml传来的参数设置的距离和边距。

实现并不是太难,一看就理解。作者的标注也在比较关键的位置出现了。

源码地址:https://github.com/ddwhan0123/LabelView

原作者git:https://github.com/corerzhang

翻翻git之---一个简单的标签控件 LabelView (随手发了两张小宝宝的玩耍照)相关推荐

  1. 【WPF】一个简单的ColorPicker控件

    在斯克迪亚看到一篇WPF动态改变主题颜色的文章,来了兴趣,于是自己搞了个简单的ColorPicker控件. 控件其实很简单,定义了5个依赖属性 FinalBrushProperty, APropert ...

  2. 在iOS上实现一个简单的日历控件

    近期需要写一个交互有点DT的日历控件,具体交互细节这里略过不表. 不过再怎么复杂的控件,也是由基础的零配件组装起来的,这里最基本的就是日历控件. 先上图: 从图中可以看出日历控件就是由一个个小方块组成 ...

  3. 【自定义控件】c#winform自定义控件实现标签控件

    介绍 首先我们设计这个控件的时候要明白控件是怎样交互的, 熟悉b站的小伙伴应该知道 ,我们上传视频的时候会去选择标签 ,我们输入标签文本 按下回车就代表该标签已经添加成功了,效果图如下! 控件拆分 我 ...

  4. 如何在Android实现桌面清理内存简单Widget小控件

    如何在Android实现桌面清理内存简单Widget小控件 我们经常会看到类似于360.金山手机卫士一类的软件会带一个widget小控件,显示在桌面上,上面会显示现有内存大小,然后会带一个按键功能来一 ...

  5. 电路分析:一个简单的光控灯电路

    一个简单的光控灯电路 利用了光敏电阻.电容 .三极管的特性实现 光敏电阻 :光照愈强,阻值就愈低,随着光照强度的升高,电阻值迅速降低,亮电阻值可小至1KΩ以下.光敏电阻对光线十分敏感,其在无光照时,呈 ...

  6. 鸡啄米vc++2010系列32(标签控件Tab Control 下)

    上一节中鸡啄米讲了标签控件知识的上半部分,本节继续讲下半部分. 标签控件的创建 MFC为标签控件的操作提供了CTabCtrl类. 与之前的控件类似,创建标签控件可以在对话框模板中直接拖入Tab Con ...

  7. python标签控件是_Python 图形用户界面编程

    Python 图形用户界面编程python Python的默认GUI工具集是Tk,咱们能够经过Python的Tkinter接口来使用Tk.编程 咱们能够跟以前同样,经过import来引入Tk,能够先在 ...

  8. Kotlin 第一弹:自定义 ViewGroup 实现流式标签控件

    古人学问无遗力, 少壮工夫老始成.纸上得来终觉浅, 绝知此事要躬行. – 陆游 <冬夜读书示子聿> 上周 Google I/O 大会的召开,宣布了 Kotlin 语言正式成为了官方开发语言 ...

  9. Android控件人生第一站,小红书任意拖拽标签控件

    前言 工作三年有余,年纪大了专业技能到没长进,有时候闲的时候总想写点东西出来,由于自己的懒惰一直拖拖拉拉,好几次还没开始就放弃了,大家也都知道,学编程的大多数不善于表达,加上自己的专业技能确实不怎么样 ...

最新文章

  1. RabbitMQ五种模式
  2. linux嵌入式c网络编程,嵌入式Linux网络编程之:网络高级编程
  3. 最全编程语言在线 API 文档
  4. 16字节 oracle md5,Oracle中的MD5加密
  5. 【数据库系统】O/R映射
  6. 一步一步从Linux线程到MySQL慢sql定位
  7. pytest测试框架(三)---使用allure描述测试用例
  8. linux gradle目录结构,android studio中,project和module的目录结构
  9. 游戏筑基开发之栈、队列及基本功能实现(使用C语言链表的相关知识)
  10. 【LeetCode】【数组】题号:*661,图片平滑器
  11. python,web框架说明
  12. python概率分析_请问如何通过Python做R*C列表的Fisher确切概率分析?
  13. 需求分析岗的一般工作流程
  14. 理论学习-协议栈学习-CANopen协议梳理
  15. 计算机在线使用.l,【本周福利】免费好用的在线计算工具,推荐给大家!
  16. CMD命令汇总 电脑入门知识【装机吧】
  17. Authorware自制拼图游戏
  18. java android 打地鼠_android实现打地鼠游戏
  19. 找出阿里云服务器无法访问淘宝司拍页面原因
  20. AdvancedInstaller打包工具使用(五)

热门文章

  1. 我们静静地等待着老师的怀念到来
  2. Invalid command 'SSLCipherSuite', perhaps misspelled or defined by a module not included in the serv
  3. ubuntu内核版本降级与切换
  4. IPv6格式转换(全写转简写)
  5. 点击图片实现放大图片
  6. 程序员,如何通过自我练习来提升技能?
  7. 软件测试人员必备的英语单词(一)
  8. 收藏版!手把手教你搭建 Greenplum 6.1 集群
  9. 十年前范雅各布森关于bufferbloat的讨论
  10. android 图片 灰度图,Android-将RGB彩×××转换为灰度图