android 定时弹出菜单,Android 弹出菜单(类iOS UIMenuController)

PopupMenuView是一个类似iOS的UIMenuController的控件,显示效果如下:

df158dfcc5b7

PopupMenuView

用过iOS系统的应该都知道,iOS系统中有一个控件是弹出菜单,就是QQ和微信聊天界面中长按消息那个控件。如下:

df158dfcc5b7

UIMenuController

Android 实现

分析来看,可以通过PopupWindow来实现,ContentView为一个LinearLayout包含许多TextView,嗯,不过其样式实现起来就不那么容易了,像是一个气泡一样,那么如何画一个气泡呢?

可以把气泡分为两个部分:一部分是一个圆角矩形,另一部分是一个小三角形。如下:

df158dfcc5b7

圆角矩形加三角形

这个很好画,Canvas对象里有很多绘画的方法,但是我们需要将这个组合图形当做一个整体绘制出去,最好的方式是先构造成一个Path,一个简单的气泡组合:

Path triangle = new Path();

triangle.lineTo(32, 0);

triangle.lineTo(16, 16);

triangle.close();

Path path = new Path();

path.addRoundRect(new RectF(0, 0, 100, 32), 16, 16, Path.Direction.CW);

path.addPath(triangle, 16, 32);

气泡和控件如何结合在一起呢?Paint可以设置很多绘制模式,如DST_IN,SRC_IN等。

mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));

df158dfcc5b7

QQ20161126-1@2x.png

Canvas绘制图案时是分层的,如DST_IN的功能就是绘制上一层和本层的交集部分的上一层内容,这样一来将控件与气泡图案分层绘制,并设置绘制模式,这样就会绘制出气泡样式的控件来,不仅限制于气泡,任何样式都可以实现。也不会影响控件的点击效果,如点击变色等。这也是PopupMenuView的核心实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值