关于OverScroller.startScroll函数失效的解决办法
程序员文章站
2022-05-05 10:25:31
...
问题场景:
利用OverScroller实现点击“上滑按钮”将一个View从窗口底部滑动到顶部,上滑失败。涉及的函数为:OverScroller.startScroll。
跟踪问题:
利用OverScroller实现View滑动的机制:
//第一步:开启滑动计算器,通知View刷新
void onClickUpMoveButton(){
mScroller.startScroll(startX, startY, dx, dy, duration) ;
mView.invalidate();
}
//第二步:View刷新会反复调用View.computeScroll(),重写此函数,实现View缓慢移动的效果
@Override
public void computeScroll() {
super.computeScroll();
if(mScroller.computeScrollOffset()){
scrollTo(0,mScroller.getCurrY());
}
}
但实际测试中发现,点击“上滑按钮”View没有上滑,通过插点打Log发现View.computeScroll()没有被执行过,然后查阅资料发现只有view被附加在当前窗口上,View.computeScroll()才会被执行。
解决方案:
方案一:初始化view的时候,保证1dp漏出屏幕,可以解决问题,但出现了一个1dp的白线,不美观。
方案二:执行mScroller滑动前,先滑动到窗口可见位置:
void onClickUpMoveButton(){
mView.setTranslationY(-1);
mScroller.startScroll(startX, startY, dx, dy, duration) ;
mView.invalidate();
mView.setTranslationY(0);
}
上一篇: Linux的SWAP分区
下一篇: Linux 扩展swap分区
推荐阅读
-
php中关于魔法函数以及魔法常量的使用详解
-
关于mysql一次自动插入2条数据出现的原因,和求解决办法
-
mysql - 关于php函数addslashes的一些小疑问
-
yii2 - 关于PHP函数strstr的用法
-
关于mysql_select_db()函数的文章推荐
-
关于在eXtremeComponents列表中隔页存值的解决办法
-
关于Intype一些小问题的解决办法
-
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析,laravelsession
-
关于PHP的相似度计算函数:levenshtein的使用介绍_php实例
-
php关于主机调用虚拟机上的linux服务解决办法