前言

最近产品有一个需求是:要在一个距形卡片上做一个倾斜的Tag,类似:

(PS:不要注意那两毛三分的穷鬼),刚开始想着用UI切图就可以了嘛,but是不可以的,在不同手机上分辨率是不同的,直接用图片适配肯定会有问题,所以打算自定义。

实现思路

额画图太丑了,这里解释一下:这里以左上角为例,我们可以把手机屏幕看成是一个直角坐标轴,我们要画一个斜角标示,只需要在我们的距形框内画一个正方形通过正方形的对角线(这里必须是正方形,这样可以控制x,y等距离),这样操控斜角标示长度只需要控制对角线长度通过path方法来绘制路径,右边同理,我们也不需要过多计算,只需要通过moveTo方法移动坐标原点。

而绘制字体呢以对角线中心为坐标原点像左右绘制通过canvas.rotate()设置字体倾斜于对角线平行。效果如下:

核心代码

绘制背景色

case TAG_LEFT:

path.lineTo(0, mHeight);

path.lineTo(mWidth, 0);

break;

case TAG_Right:

path.lineTo(mWidth, 0);

path.lineTo(mWidth, mHeight);

break;

case TAG_LEFT_BOTTOM:

path.lineTo(mWidth, mHeight);

path.lineTo(0, mHeight);

break;

case TAG_RIGHT_BOTTOM:

path.moveTo(0, mHeight);//移动坐标原点位置

path.lineTo(mWidth, mHeight);

path.lineTo(mWidth, 0);

break;

case TAG_LEFT_BAR:

path.moveTo(mWidth, 0);

path.lineTo(0, mHeight);

path.lineTo(0, mHeight - mySlantedHeight);

path.lineTo(mWidth - mySlantedHeight, 0);

break;

case TAG_RIGHT_BAR:

path.lineTo(mWidth, mHeight);

path.lineTo(mWidth, mHeight - mySlantedHeight);

path.lineTo(mySlantedHeight, 0);

break;

case TAG_LEFT_BOTTOM_BAR:

path.lineTo(mWidth, mHeight);

path.lineTo(mWidth - mySlantedHeight, mHeight);

path.lineTo(0, mySlantedHeight);

break;

case TAG_RIGHT_BOTTOM_BAR:

path.moveTo(0, mHeight);

path.lineTo(mySlantedHeight, mHeight);

path.lineTo(mWidth, mySlantedHeight);

path.lineTo(mWidth, 0);

break;

通过计算绘制字体和角度

rect = new Rect(0, 0, w, h);

rectF = new RectF(rect);

rectF.right = mTextPaint.measureText(myText, 0, myText.length());

rectF.bottom = mTextPaint.descent() - mTextPaint.ascent();//Ascent: 字符顶部到baseLine的距离 Descent: 字符底部到baseLine的距离

rectF.left += (rect.width() - rectF.right) / 2.0f;

rectF.top += (rect.height() - rectF.bottom) / 2.0f;

xy[0] = rectF.left;

xy[1] = rectF.top - mTextPaint.ascent();

xy[2] = w / 2;

xy[3] = h / 2;

xy[4] = -ROTATE_ANGLE;

//设置字体

canvas.rotate(angle, centerX, centerY);

canvas.drawText(myText, toX, toY + PADDING_TOP, mTextPaint);

使用方法

testView.setText("打折中")

.setMode(TAG_LEFT_BAR)

.setBackground(Color.parseColor("#ff6677"))

.setTextColor(Color.parseColor("#000000"))

.setSlantedHeight(50)

.setTextSize(29);

或直接在布局中

android:layout_width="80dp"

android:layout_height="80dp"

android:layout_alignParentTop="true"

android:layout_alignParentRight="true"

app:myBackgroundColor="#667fff"

app:mySlantedHeight="30dp"

app:myText="热卖中"

app:myTextColor="#ffffff"

app:myTextSize="16sp"

app:tagModel="right_bar" />

常用API

API名称

介绍

myBackgroundColor

斜角背景颜色

mySlantedHeight

斜角高度

myText

字体展示

tagModel

样式模式共八种

myTextSize

字体大小

myTextColor

字体颜色

源码见github

总结

以上所述是小编给大家介绍的Android实现倾斜角标样式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

android+布局倾斜,Android实现倾斜角标样式相关推荐

  1. android+布局倾斜,android – 如何在Eclipse图形布局视图中使斜...

    在Eclipse中工作,我试图将一些斜体文本放到布局上.问题是,当我设置时 android:textStyle ="italic",文字消失. (内容的高度变为0,整个TextVi ...

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

    您可以使用Canvas使用Slant top创建自定义视图,然后将其放在textView上,以实现此外观. Code snippet for slant top custom view :- publ ...

  3. xamarin android 布局,Xamarin.Android 上中下布局

    xml代码: xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_par ...

  4. android+布局分块,android的List View的Item布局问题

    线性布局,你的第一个textview已经设成占满整个空间了,你的中.右布局当然出不来了,姑且认为你左中右三块平均分配水平空间,可以这么写 android:layout_width="matc ...

  5. android布局翻译,android – 使用翻译动画将视图从一个布局转换为另一个布局

    我是 Android动画的新手,我的要求是在点击该视图时将视图从一个布局转换为单个xml文件中的布局. 场景: 假设我单击一个按钮,它出现在xml文件中标题的顶部,它应该向下移动/转换(它应该会产生一 ...

  6. Android布局中 android:layout_gravity=bottom为何不起作用?

    在android布局时我们有时会需要将位于LinearLayout布局中的控件放在布局底部,或者是同时想将几个控件底部对齐,此时我们自然会想到使用 android:layout_gravity=&qu ...

  7. 名片夹android布局代码,Android自定义布局实现仿qq侧滑部分代码

    自定义布局实现仿qq侧滑部分Android代码,供大家参考,具体内容如下 实现说明: 通过自定义布局实现: SlidingLayout继承于 HorizontalScrollView /** * Cr ...

  8. android布局错,Android Studio布局错误

    嘿,我真的需要你的帮助 . 我的问题是Android Studio不会在模拟器或物理设备中正确显示布局 . 每当我放置一个textView,按钮等,我想将它居中(水平,垂直或两者),然后我启动模拟器它 ...

  9. android 布局排排,[android]如何使LinearLayout布局从右向左水平排列,而不是从左向右排列...

    方法1:利用android:layout_weight android:layout_width="match_parent" android:layout_height=&quo ...

最新文章

  1. 例5.12 输入一串字符,字符个数不超过100,且以.结束。 (信息学奥赛一本通)...
  2. 105_键盘事件对象
  3. radio按扭设置只读_disabled属性样式问题
  4. setXxx()和getXxx()的作用
  5. 排序函数(sort()、sorted()、argsort()函数)
  6. combox高度修改 winfrom_WinForm窗体中ComboBox控件自定义高度和选项文本居中完美解决方案...
  7. 四十三、配置防盗链、访问控制Directory、访问控制FilesMatch
  8. redis 可视化客户端工具
  9. JDK1.8和JRE文件结构
  10. 分治法求最大值c语言思想,整数的除法 分治思想 求最大子向量和
  11. Flink_网站独立访客数(UV)(Redis+布隆过滤器)
  12. 基于【NPU+AI ISP】多媒体SoC方案开发硬件边缘计算_AI 摄像机产品
  13. web前端入门到实战:行内和块状元素水平居中与单行或多行文本垂直居中及隐性改变display类型
  14. JS 实现数字转罗马数字
  15. 蜗牛星际NAS,通过ssh修改mac和sn
  16. C语言三个数相乘怎么写,编程怎么写乘法
  17. narx神经网络 matlab,神经网络 NARX
  18. 一些开发时的用法经验
  19. 进入社会一周年的些许感悟和经历
  20. VMware Tools 服务详解-容易被忽略的螺丝钉

热门文章

  1. 从零开始搭建一个自己的前端脚手架(一):基础篇
  2. 整数因子分解问题(多种方法)
  3. oracle降权,网站在百度里找不到了怎么办? 网站被降权了怎么办?
  4. 计算机汉字的编辑教案,人教版四年级信息技术《第三课 做个巧手小编辑》教案(精品获奖)...
  5. IDEA Shelve Silently 静默搁置
  6. 阿里数据分析岗一面总结与反思
  7. c语言中isseek用法,seek的用法总结大全
  8. linux搭建rtmp服务器搭建,linux下利用Nginx搭建RTMP服务器
  9. 天创速盈简述怎样提升拼多多权重,这些方式更有效
  10. 计算机和网络技术难点总结: