安卓开发之自定义控件TipView仿QQ长按后的提示窗口


先上效果图:

这里写图片描述

之前用手机QQ时,一直很觉得这个窗口提示挺不错的,今天将它大概地实现了一遍。

首先是:提示窗口的三角下标是可以改变位置的,然后窗口中有很多小的item,item被点击时会显示出不同的颜色,

同时三角下标的颜色也随着改变。

然后是:提示窗口的item们会根据传入的坐标实现向上显示或向下显示。

一、对TipView定义一些成员变量

// 一些状态变量
private static final int STATUS_DOWN = 1;
private static final int STATUS_UP = 2;
// 初始窗口的Item显示在上方
private int mStatus = STATUS_UP;


// Item之间的分隔线的颜色
private int mSeparateLineColor ;

// 窗口边上两个方块的边角半径大小
private int mCorner = dip2px(6);

private Paint mPaint; // 画方块和文字的画笔
private Paint doPaint; // 画三角下标的画笔

private Path mPath; // 绘制的路径

private int mBorderMargin = dip2px(5); // 提示窗口与屏幕(根布局)的最小距离
private int mItemWidth = dip2px(50); // 窗口Item的宽度
private int mItemHeight = dip2px(48); // 窗口Item的高度
private int mTriangleTop = dip2px(50); // 三角下标的顶点
private int mHalfTriangleWidth = dip2px(6); // 三角小标的半宽
private int mItemBorder; // 三角小标与窗口Item的临界
private int realLeft; // 窗口的left值

private List<TipItem> mItemList = new ArrayList<>(); // 存储每个Item的信息
private List<Rect> mItemRectList = new ArrayList<>(); // 存储每个方块的信息


private OnItemClickListener onItemClickListener; // Item点击接口
private int choose = -1; // 是否有Item被按下,是为Item的序号,否为-1

// 外界传入的点击坐标x、y
private int x;
private int y;

二、TipView的初始化

TipView的构造方法:

public TipView(Context context, ViewGroup rootView,int x,int y,List<TipItem> mItemList) {
    super(context);

    this.x = x; // 设置传入过来的x轴坐标
    this.y = y;  // 设置传入过来的y轴坐标
    // x和y决定了三角下标的位置

    initPaint(); // 初始化画笔
    setTipItemList(mItemList); // 初始化Item集合,并对Item的字符串长度进行处理
    //【当字符串过长
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值