{"repo":"dqh147258/ClipPathLayout","free":true,"listed":false,"github":"https://github.com/dqh147258/ClipPathLayout","clone":"git clone https://github.com/dqh147258/ClipPathLayout.git","description":"Android 不规则图形布局","language":"Java","stars":153,"topics":["viewgroup","android-library","irregular-figure","transition-animation","path"],"license":"Apache-2.0","category":"mobile-apps","readme_excerpt":"ClipPathLayout English Doc Android中实现不规则图形的布局 及由此扩展的转场动画布局 效果展示 不规则图形 将方形图片裁剪成圆形并且让圆形View的4角不接收触摸事件 很多游戏都会有方向键,曾经我也做过一个小游戏,但是在做方向键的时候遇到一个问题,4个方向按钮的位置会有重叠,导致局部地方会发生误触. 当时没有特别好的解决办法,只能做自定义View,而自定义View特别麻烦,需要重写onTouchEvent和onDraw计算落点属于哪个方向,并增加点击效果. 简单的自定义View会丧失很多Android自带的一些特性,要支持这些特性又繁琐而复杂. 下面借助于ClipPathLayout用4个菱形按钮实现的方向控制键很好的解决了这个问题 对于遥控器的按键的模拟同样有上述问题,一般只能采用自定义View实现,较为繁琐. 以下是借助于ClipPathLayout实现的遥控器按钮,由于没有美工切图,比较丑,将就下吧 甚至我们可以将不连续的图形变成一个View,比如做一个阴阳鱼的按钮 转场动画 两个View的场景切换效果,Android原生自带的场景切换效果大部分是由动画实现的平移,缩小,暗淡. 原生比较少带有那种PPT播放的切换效果,一些第三方库实现的效果一般是由在DecorView中添加一层View来实现较为和谐的切换, 沪江开心词场里使用的就是这种动画,这种动画很棒,但是也有一个小缺点,就是在切换的过程中,切换用的View和即将要切换的View没有什么关系. 借助于ClipPathLayout扩展的TransitionFrameLayout也可以实现较为和谐的切换效果,由于是示例,不写太复杂的场景,以下仅用两个TextView作为展示 在浏览QQ空间和使用QQ浏览器的过程看到腾讯的广告切换效果也是很不错的,这里借助于TransitionFrameLayout也可以实现这种效果 其实大部分的场景切换应该是用在Fragment中,这里也用TransitionFragmentContainer实现了Fragment的场景切换效果 使用 添加依赖 在app module中的build.gradle中添加依赖 如果依然使用Jcenter版本则是 不规则图形布局的使用 当前实现了三个不规则图形的布局 - ClipPathFrameLayout - ClipPathLinearLayout - ClipPathRelativeLayout 如果有其他布局要求,请自定义,参见自定义ClipPathLayout ClipPathLayout是一个接口,以上布局都实现了ClipPathLayout接口,并且具备父类的功能. 要实现不规则图形,其实要操作的并不是父布局,而是子View. 我们需要给子View添加一些信息,这样父布局才知道应该如何去实现这个不规则图形. 这里以最简单的圆形View为例. 在一个实现了ClipPathLayout接口的ViewGroup(以ClipPathFrameLayout为例)中添加一个子View(ImageView). 然后构建一个PathInfo对象 搞定!运行就可以看到一个圆形的View. 和效果展示上的这个图差不多,不过这张图多了几个按钮,然后那个圆形View有个绿色背景,那个是用来做对比的,在那个View之下添加了一个绿色的View,不要在意这些细节...... 对其中使用到的参数和方法做下说明 PathInfo.Builder PathInfo创建器,用于配置和生成PathInfo. 构造方法定义","default_branch":null,"files":null,"tree":[],"storefront":"/r/dqh147258","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/dqh147258/ClipPathLayout/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}