在android4.1及之后版本如何恢复ListView/GridView下拉空白回弹的效果
2016-07-25 17:17
309 查看
在android4.1及之后版本如何恢复ListView/GridView下拉空白回弹的效果
[DESCRIPTION]在Android 4.0及以前的版本,MTK有在Google默认模糊边缘的基础上,做了一个下拉回弹的效果:在ListView和GridView等列表控件的界面上,当滑动画面到顶部或底部时,屏幕上方或下方处会有一个很长的空的区域,松手以后列表会自动弹回。但是android4.1及之后版本无此效果,因为这个效果会引起CTS
test fail!
如果不需要通过CTS测试,请问如何恢复ListView/GridView下拉空白回弹的效果?
效果图:
5.12tp-32.png (48.78 KB, 下载次数: 0 )
下载附件 保存到相册
2016-5-12 16:21 上传
[SOLUTION]
1.请修改alps/frameworks/base/core/JAVA/android/view/ViewConfiguration.java
修改如下两个变量:
/**
* Max distance to overscroll for edge effects
*/
private static final int OVERSCROLL_DISTANCE = 240; //将0改为240
/**
* Max distance to overfling for edge effects
*/
private static final int OVERFLING_DISTANCE = 240; //将6改为240
2.请修改alps/frameworks/base/core/java/android/widget/AbsListView.java,找到
FlingRunnable这个类的run()方法,找到其中的
private class FlingRunnable implements Runnable {
...
@Override
public void run() {
...
case TOUCH_MODE_OVERFLING: {
final OverScroller scroller = mScroller;
if (scroller.computeScrollOffset()) {
final int scrollY = mScrollY;
final int currY = scroller.getCurrY();
final int deltaY = currY - scrollY; /// 刪掉這行
/// 新增下面的代碼
/**
* M: If user flings on the list in an opposite direction during an over fling quickly,
* the scrollY will change from positive(negative) to negative(positive), so list
* run into abnormal state, view will be not displayed(only mScrollY changes).
*
* To fix this, we only let the list scroll by mScrollY distance to make the list
* restore the normal touch state, then fling the list using the current velocity. @{
*/
final int deltaY;
final boolean needChangeMode = ((mScrollY >= 0 && currY <= 0) || (mScrollY <= 0 &&
currY >= 0));
if (needChangeMode) {
deltaY = -mScrollY;
} else {
deltaY = currY - scrollY;
}
/** @} */
if (overScrollBy(0, deltaY, 0, scrollY, 0, 0,
0, mOverflingDistance, false))
......
......
} else {
Xlog.d(TAG, "FlingRunnable overfling intend to endfling: mScrollY = "+
mScrollY);
if(mScrollY !=0){ //mtk add
if(sDbgMotion) Log.d(TAG,"FlingRunnable TOUCH_MODE_OVERFLING,mScroller
animation fininshed,mScrollY !=0,will startSpringBack");
startSpringback(); //mtk add
}else{ //mtk add
endFling();
} //mtk add
}
break;
标注//mtk add的代码为新增代码
再次提醒,这个改动会导致CTS 测试AbsListViewTest.java中testSetOnScrollListener()这个test
case 测试失败,如果要过CTS,那务必不要做此FAQ的修改
相关文章推荐
- 论坛20大经典变态楼主主题和回复,暴强!
- C++去除输入行中空白的方法
- 一个JavaScript去除字符串末尾的空白实例代码
- JS加载iFrame出现空白问题的解决办法
- jsp编程去除空白行的方法
- flex chrome浏览器调试出现空白的解决方法
- DEDECMS5.3所有PHP页面和后台打开全部空白的解决办法
- php中出现空白页的原因及解决方法汇总
- PHP微信开发之微信消息自动回复下所遇到的坑
- Perl删除前导和拖尾空白(删除左右空格、空白字符)
- java微信开发第二步 获取消息和回复消息
- 解析ScrollPic在ie8下只滚动一遍,然后变为空白 ie6,ie7,chrome,firefox正常
- HTML5实现留言和回复页面样式
- BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
- Extjs 3.3切换tab隐藏相应工具栏出现空白解决
- Java开发微信公众号接收和被动回复普通消息
- 详解iOS开发中UITableview cell 顶部空白的多种设置方法
- CSS中的空白效果属性使用小结
- PHP微信开发之微信消息自动回复下所遇到的坑
- 5种方法快速去掉HTML中Inline-Block的空白