仿支付宝股票 猜涨跌View 携带百分比View

有两种需求 ,一种按钮显示携带字体 看涨 看跌,自带涨跌动画。另一种要求实时显示涨跌比动态。综合两种需求自定义一个View。

上面动画图 与实际稍微有所不同 本人擅长制作gif 图....

  1. 分析两种需求,两者可以复用,完全可以定义一个View ,然后利用 Android View 动画 和 布局的重新刷新实现实时绘制。
  2. 通过方向控制左右View 。
  3. 绘制字体在View 中间。实现一起涨跌变化
  4. 测量模式 默认即可
  5. 源码如下:
public class LadderProgressView extends View {private final String DIRECTION_LEFT = "left";private String mDirection = DIRECTION_LEFT;private Path mPath = new Path();private Paint mPaint;private String mText = "";private int mTextColor = Color.parseColor("#ffffff");private int mBackGroungColor = Color.RED;private float mTextSize = 40f;private float mWidth = 0f;private float mHeight = 0f;private int mAngle = 45;//预留倾斜角度public LadderProgressView(Context context) {this(context, null);}public LadderProgressView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public LadderProgressView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ladderView);mText = ta.getString(R.styleable.ladderView_lad_text);mDirection = ta.getString(R.styleable.ladderView_lad_direction);mTextColor = ta.getColor(R.styleable.ladderView_lad_text_color, Color.WHITE);mTextSize = ta.getDimension(R.styleable.ladderView_lad_text_size, 0f);mBackGroungColor = ta.getColor(R.styleable.ladderView_lad_background_color, 0);mAngle = ta.getInt(R.styleable.ladderView_lad_angle, 0);ta.recycle();mPaint = new Paint();mPaint.setStyle(Paint.Style.FILL);mPaint.setColor(mBackGroungColor);mPaint.setAntiAlias(true);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);this.mHeight = h;this.mWidth = w;}@Overrideprotected void onDraw(Canvas canvas) {mPath.reset();if (mDirection.equals(DIRECTION_LEFT)) {setLadderLeftDraw();} else {setLadderRightDraw();}mPath.close();canvas.drawPath(mPath, mPaint);if (!TextUtils.isEmpty(mText)) {drawText(canvas);}}public void setLadderLeftDraw() {//设置将要用来画扇形的矩形的轮廓float r = mHeight / 2;//做圆弧半径
//        mPath.addCircle(mHeight / 2, mHeight / 2, mHeight / 2, Path.Direction.CW)//先画半圆RectF roundRectT = new RectF(0f, 0f, mHeight / 2, mHeight);float[] array = {r, r, 0f, 0f, 0f, 0f, r, r};mPath.addRoundRect(roundRectT, array, Path.Direction.CCW);//右边斜边mPath.moveTo(mHeight / 2, 0f);// 连接路径到点mPath.lineTo(mWidth, 0f);double x = mWidth - mHeight * (Math.tan(Math.toRadians(mAngle)));mPath.lineTo((float) x, mHeight);mPath.lineTo(mHeight / 2, mHeight);}public void setLadderRightDraw() {float r = mHeight / 2;RectF roundRectT = new RectF(mWidth - mHeight / 2, 0f, mWidth, mHeight);float[] array = {0f, 0f, r, r, r, r, 0f, 0f};mPath.addRoundRect(roundRectT, array, Path.Direction.CCW);double x = mHeight * (Math.tan(Math.toRadians(mAngle)));mPath.moveTo((float) x, 0f);// 连接路径到点mPath.lineTo(mWidth - mHeight / 2, 0f);mPath.lineTo(mWidth - mHeight / 2, mHeight);mPath.lineTo(0f, mHeight);}public void drawText(Canvas canvas) {Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);paint.setAntiAlias(true);paint.setTextSize(mTextSize);paint.setColor(mTextColor);paint.setTextAlign(Paint.Align.CENTER);Rect targetRect = new Rect(0, 0, (int) mWidth, (int) mHeight);Paint.FontMetrics fontMetrics = paint.getFontMetrics();float top = fontMetrics.top;//为基线到字体上边框的距离,即上图中的topfloat bottom = fontMetrics.bottom;//为基线到字体下边框的距离,即上图中的bottomfloat baseLineY = (targetRect.centerY() - top / 2 - bottom / 2);
//            val fontMetrics = paint.fontMetricsInt
//            val baseline = (targetRect.bottom + targetRect.top - fontMetrics.bottom - fontMetrics.top) / 2// 下面这行是实现水平居中,drawText对应改为传入targetRect.centerX()canvas.drawText(mText, targetRect.centerX(), baseLineY, paint);}
}
复制代码

最后 Demo 地址

仿支付宝股票 猜涨跌View相关推荐

  1. Android一步一步剖析+实现仿支付宝手势密码自定义View

    最近项目需求:要求在项目中添加手势密码和指纹验证,恰巧最近在苦练自定义View,于是参考了网上轮子和自己的理解,实现了如下的效果. 国际惯例:Without pic you say a JB(奖杯). ...

  2. Android特效专辑(十二)——仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View...

    Android特效专辑(十二)--仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View 先来看看这个效果 这是我的在Only上添加的效果,说实话,Only现在都还只是半成品,台面都上不了,怪自己技术 ...

  3. 自定义xy组 android,Android自定义view之仿支付宝芝麻信用仪表盘示例

    自定义view练习 仿支付宝芝麻信用的仪表盘 对比图: 首先是自定义一些属性,可自己再添加,挺基础的,上代码 接着在构造方法里初始化自定义属性和画笔: private void initAttr(At ...

  4. Android仿支付宝UI功能开发,Android 自定义view仿支付宝咻一咻功能

    支付宝上有一个咻一咻的功能,就是点击图片后四周有水波纹的这种效果,今天也写一个类似的功能. 效果如下所示: 思路: 就是几个圆的半径不断在变大,这个可以使用动画缩放实现,还有透明动画 还有就是这是好几 ...

  5. kotlin实现的简单个人账户管理APP(三) 自定义View仿支付宝的密码输入框/密码相关逻辑

    转载请注明出处:http://blog.csdn.net/a512337862/article/details/78874322 前言 1.本篇博客相关的项目介绍请参考基于kotlin实现的简单个人账 ...

  6. Android特效专辑(十二)——仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View

    Android特效专辑(十二)--仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View 先来看看这个效果 这是我的在Only上添加的效果,说实话,Only现在都还只是半成品,台面都上不了,怪自己技术 ...

  7. android 自定义饼图半径不定,【Android】仿支付宝账单统计饼状图的自定义view

    仿支付宝统计饼状图的自定义view,如下图: 项目地址:https://github.com/bigeyechou/CustomViewCollection 目录:customviewcollecti ...

  8. android wear支付宝6,Android自定义View仿支付宝输入六位密码功能

    跟选择银行卡界面类似,也是用一个PopupWindow,不过输入密码界面是一个自定义view,当输入六位密码完成后用回调在Activity中获取到输入的密码并以Toast显示密码.效果图如下: 自定义 ...

  9. android 自定义view仿支付宝写五褔及播放

    本文记录一下实现仿支付宝写五褔及回放的过程. 先看效果如下,没有找到相关的背景图,只能以田字格当作背景. 整个过程分为两部分,一部分是写字,一部份是回放. 该过程主要使用了path和pathmeasu ...

  10. Android自定义view之仿支付宝芝麻信用仪表盘 ---by ccy

    自定义view练习 仿支付宝芝麻信用的仪表盘 对比图: 首先是自定义一些属性,可自己再添加,挺基础的,上代码 <?xml version="1.0" encoding=&qu ...

最新文章

  1. 搭建git for windows服务器(100%可以成功)【转】
  2. [原创]教你如何最快写出酷炫的dialog对话框
  3. RocketMQ错误消息重试策略之Consumer的重试机制(Exception情况)
  4. 认真测试直播软件,直播这么火,你知道怎么测试直播软件吗?
  5. ASP.NET Aries 入门开发教程7:DataGrid的行操作(主键操作区)
  6. flutter: 根视图、根元素与根渲染
  7. 《Effective C#》快速笔记(三)- 使用 C# 表达设计
  8. matlab 汽车后视镜成像,相机成像原理及matlab仿真程序
  9. Python3.6实现付费酷狗音乐免费下载(已用tkinter封装GUI)
  10. 推荐效果线上评测:AB测试平台的设计与实现
  11. 经典面试问题回答思路
  12. mysql中where in用法
  13. 记录一个使用imgkit库转图片在windows上可能会出现的问题 iis OSError: [WinError 6] 句柄无效
  14. 怎么看计算机配置好不好,电脑参数怎么看
  15. 微信输入法语音转文字的设计点
  16. WPS插件开发流程(2)
  17. Flink-FileSystem
  18. 总结了下PHPExcel官方读取的几个例子
  19. 在你所有的项目中都加入 TailwindCSS 吧!
  20. Zcash 对以太坊来说意味着什么?

热门文章

  1. js去掉url中的域名的方法
  2. (八) 爬虫教程 |Scrapy框架的使用
  3. 许晓斌_Maven实战(四)——基于Maven的持续集成实践
  4. 用计算机求算术平方根教案,人教版数学七年级下册-课题-用计算器求算术平方根 教案...
  5. Linux-bash笔记
  6. 解决mysql开启GTID主从同步出现1236错误问题
  7. 新唐 Nuvoton M031 入门 点亮板载LED
  8. 人工智能第二章知识表示
  9. 计算机用户拒绝访问权限,解决局域网内拒绝访问无访问权限的问题
  10. oracle-12514,ORA-12514的解决方法(多图)