Android自定义TipView仿QQ长按后的提示窗口-创新互联

自定义view--TipView

创新互联建站是一家集网站建设,西工企业网站建设,西工品牌网站建设,网站定制,西工网站建设报价,网络营销,网络优化,西工网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

TipView其实就是类似QQ长按消息弹出来的横放的提示框。


通过看书和参考各位大神的博客(再次对大神表示恭敬),我用了一下午时间写完了这么一个view。


先来看图:


1 自定义TipView思路

1 首先我们考虑是继承View还是ViewGroup


其实TipView直观看更像是一个group,里面有子view。但其实我们并不需要继承ViewGroup,因为我们不用像LinearLayout那样在布局文件里面去添加子view,而且TipView的item我们用文字就好。如果继承于Group我们还要考虑onLayout的问题,为了简单我直接继承自View。


2 重写方法


TipView要像PopupWindow、Dialog一样显示在Activity上而不是添加到父容器中,原因是如果创建后添加到父容器中去托管的话,父容器的布局规则会影响我们TipView的显示效果。所以我们要使用WindowManager来把TipView添加到外层布局,并且要充满屏幕,i原因为我们要点击tem之外的地方使TipView消失。所以view大小是固定充满屏幕的,不需要重写onMeasure。
需要重写onDraw来绘制view。


3 显示位置


TipView主要分两部分,一部分是三角标,一部分是带有圆角的主体。


当我们点击后,三角标顶点始终在点击位置上方一定距离(如果顶点定位在点击位置,会导致手指挡住一部分三角,用户体验度不佳),并且主体不要与屏幕左右边界碰撞,当要遮挡ToolBar时向下绘制。

2 定义变量

public static final int TOP = 0;//从点击位置上面绘制
  public static final int DOWN = 1;//...下面...

  private int mItemWidth;//item宽
  private int mItemHeight;//item高
  private int mTriaHeight;//三角的高度
  private int mHalfTriaWidth;//三角的半宽
  private int mTriaAcme;//三角的顶点
  private int mTriaItemBorder;//三角的顶点
  private int realLeft;//窗口距左边的值
  private int marginSide;//窗口距左右边的值,防止出现的窗口紧贴边界
  private int mSeparateLineColor = Color.WHITE;
  private int mTextSize;//选项文字的大小
  private int mTextColor;//选项文字的颜色

  private int mItemSeparation;//分割线宽度;
  private int mRadius;//圆角
  private List items;//存放item的集合
  private List mItemRectList = new ArrayList<>(); // 存储每个方块
  private Paint mPaint;//画笔
  private Paint mSeparationPaint;//分割线画笔
  private Paint mSPaint;//三角的画笔
  private Path mPath;//路径
  private int x, y;//点击的位置
  private ViewGroup viewRoot;//父容器
  private int location = TOP;//绘制位置
  private int choose = -1;//点击的item
  private int mToolbarBottom;//Toolbar下边距屏幕上距离
  private WindowManager windowManager;
  private WindowManager.LayoutParams layoutParams;//windowManger布局管理器,为了像Dialog一样在Activity弹出,而不是依附于某个group
  private onItemCilckLinener itemCilckLinener;
  private Context context = null;

网页标题:Android自定义TipView仿QQ长按后的提示窗口-创新互联
本文路径:http://ybzwz.com/article/dcjisg.html