翻翻git之---一个简单的标签控件 LabelView (随手发了两张小宝宝的玩耍照)
转载请注明出处:王亟亟的大牛之路
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 (随手发了两张小宝宝的玩耍照)相关推荐
- 【WPF】一个简单的ColorPicker控件
在斯克迪亚看到一篇WPF动态改变主题颜色的文章,来了兴趣,于是自己搞了个简单的ColorPicker控件. 控件其实很简单,定义了5个依赖属性 FinalBrushProperty, APropert ...
- 在iOS上实现一个简单的日历控件
近期需要写一个交互有点DT的日历控件,具体交互细节这里略过不表. 不过再怎么复杂的控件,也是由基础的零配件组装起来的,这里最基本的就是日历控件. 先上图: 从图中可以看出日历控件就是由一个个小方块组成 ...
- 【自定义控件】c#winform自定义控件实现标签控件
介绍 首先我们设计这个控件的时候要明白控件是怎样交互的, 熟悉b站的小伙伴应该知道 ,我们上传视频的时候会去选择标签 ,我们输入标签文本 按下回车就代表该标签已经添加成功了,效果图如下! 控件拆分 我 ...
- 如何在Android实现桌面清理内存简单Widget小控件
如何在Android实现桌面清理内存简单Widget小控件 我们经常会看到类似于360.金山手机卫士一类的软件会带一个widget小控件,显示在桌面上,上面会显示现有内存大小,然后会带一个按键功能来一 ...
- 电路分析:一个简单的光控灯电路
一个简单的光控灯电路 利用了光敏电阻.电容 .三极管的特性实现 光敏电阻 :光照愈强,阻值就愈低,随着光照强度的升高,电阻值迅速降低,亮电阻值可小至1KΩ以下.光敏电阻对光线十分敏感,其在无光照时,呈 ...
- 鸡啄米vc++2010系列32(标签控件Tab Control 下)
上一节中鸡啄米讲了标签控件知识的上半部分,本节继续讲下半部分. 标签控件的创建 MFC为标签控件的操作提供了CTabCtrl类. 与之前的控件类似,创建标签控件可以在对话框模板中直接拖入Tab Con ...
- python标签控件是_Python 图形用户界面编程
Python 图形用户界面编程python Python的默认GUI工具集是Tk,咱们能够经过Python的Tkinter接口来使用Tk.编程 咱们能够跟以前同样,经过import来引入Tk,能够先在 ...
- Kotlin 第一弹:自定义 ViewGroup 实现流式标签控件
古人学问无遗力, 少壮工夫老始成.纸上得来终觉浅, 绝知此事要躬行. – 陆游 <冬夜读书示子聿> 上周 Google I/O 大会的召开,宣布了 Kotlin 语言正式成为了官方开发语言 ...
- Android控件人生第一站,小红书任意拖拽标签控件
前言 工作三年有余,年纪大了专业技能到没长进,有时候闲的时候总想写点东西出来,由于自己的懒惰一直拖拖拉拉,好几次还没开始就放弃了,大家也都知道,学编程的大多数不善于表达,加上自己的专业技能确实不怎么样 ...
最新文章
- RabbitMQ五种模式
- linux嵌入式c网络编程,嵌入式Linux网络编程之:网络高级编程
- 最全编程语言在线 API 文档
- 16字节 oracle md5,Oracle中的MD5加密
- 【数据库系统】O/R映射
- 一步一步从Linux线程到MySQL慢sql定位
- pytest测试框架(三)---使用allure描述测试用例
- linux gradle目录结构,android studio中,project和module的目录结构
- 游戏筑基开发之栈、队列及基本功能实现(使用C语言链表的相关知识)
- 【LeetCode】【数组】题号:*661,图片平滑器
- python,web框架说明
- python概率分析_请问如何通过Python做R*C列表的Fisher确切概率分析?
- 需求分析岗的一般工作流程
- 理论学习-协议栈学习-CANopen协议梳理
- 计算机在线使用.l,【本周福利】免费好用的在线计算工具,推荐给大家!
- CMD命令汇总 电脑入门知识【装机吧】
- Authorware自制拼图游戏
- java android 打地鼠_android实现打地鼠游戏
- 找出阿里云服务器无法访问淘宝司拍页面原因
- AdvancedInstaller打包工具使用(五)
热门文章
- 我们静静地等待着老师的怀念到来
- Invalid command 'SSLCipherSuite', perhaps misspelled or defined by a module not included in the serv
- ubuntu内核版本降级与切换
- IPv6格式转换(全写转简写)
- 点击图片实现放大图片
- 程序员,如何通过自我练习来提升技能?
- 软件测试人员必备的英语单词(一)
- 收藏版!手把手教你搭建 Greenplum 6.1 集群
- 十年前范雅各布森关于bufferbloat的讨论
- android 图片 灰度图,Android-将RGB彩×××转换为灰度图