Skip to content

summerpalace2/News

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

「知晤晨笺」

一个仿写知乎日报的APP

这是我中期考核的作品,时隔半年,迎来这一次的重构。重写知乎日报的webview滑动逻辑,以及美化UI,同时对主页进行了compose重构,用户可以通过个人页点击按钮切换(点击头像跳转)

下面我来说一下本次重构的新颖点和难点

WebView的左右滑动切换和WebView内部的滑动冲突解决

页面展示 WebView 演示

在知乎日报的WebView页,我们可以发现它是以类似翻页的操作实现的,但是**「知晤晨笺」**对于滑动的处理不一样,它始终是一个Activity没有fragment,它通过检测左右滑动来判断页面是否需要刷新,它的数据源由一个变量

储存

private val stories = mutableListOf<Story>()

我们知道,对于WebView其页面内部也会有滑动,并且如果为我们识别左右滑动更新WebView的url时还可能会遇到这样的问题,对于全面屏手势,左右边缘的滑动即侧滑对应系统层面的手势返回,这会被Webview消费掉,导致WebView的网页回退(在WebView没有历史记录,即第一个网页时,才能手势退出界面)

所以这里解决了3种条件下的滑动冲突

1.WebView拦截 vs. 系统侧滑返回(最高优先级冲突)

引入 edgeThreshold (40dp)即边缘宽度,在这个边缘WebView不会拦截滑动并消费事件

2.Web 垂直滚动 vs. 自定义横向翻页(维度识别冲突)

引入“动态斜率判定” (abs(deltaX) > abs(deltaY) * 1.6),当用户有明显的翻页意图再执行翻页操作

3.WebView 内部元素点击/横向滚动 vs. 自定义翻页(组件功能冲突)

如果网页内部有横向滑动的图片轮播或者用户只是想点击一个链接,自定义的翻页逻辑可能会拦截这些事件。

通过 isSwipingHorizontally 状态位和事件消费机制处理。

拉伸回弹(处理LazyColumn触底刷新数据后无法滑动)

修改前:Compose 演示 2 修改后Main Compose 演示 1

compose页面重构中,对于主页的滑动刷新逻辑,我发现一直往下滑刷新会出现手势划不动的情况。保持一直下滑的手势,多次下滑不停顿,就会一直卡住,明明以及看到下面数据的影子了,但是当你松开手指,过一会,你发现又可以了。这个就是Android12更新的拉伸回弹机制在作祟

去除这个机制后就不卡了

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors