您的位置:首页 > 移动开发 > Android开发

Android 实现ScrollView自定义翻页宽度(每次滑动一页) - 类似钉钉工作台

2017-02-15 22:06 399 查看

【描述】:

每个属性都是一个item,每屏显示3个item,每次滑动,ScrollView滚动一个屏幕的宽度。

【效果】:



【代码】:

【一】添加item到ScrollView

if (!functionPage.getReportPanel().isEmpty()) {
for (ReportItem reportItem : functionPage.getReportPanel()) {
View view = mInflater.inflate(R.layout.item_main_center,
layoutScrollview, false);
//设置每个item的宽度为屏幕宽的1/3
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
screenWidth / 3, ViewGroup.LayoutParams.WRAP_CONTENT);
view.setLayoutParams(params);
((TextView) view.findViewById(R.id.top_tv_value)).setText(reportItem.getValue());
((TextView) view.findViewById(R.id.top_tv_name)).setText(reportItem.getName());

layoutScrollview.addView(view);
}

//添加空白view,方便scrollview滚动操作
int blankNum = functionPage.getReportPanel().size() % 3 == 0 ?
0 : 3 - functionPage.getReportPanel().size() % 3;
for (int i = 0; i < blankNum; i++) {
View view = mInflater.inflate(R.layout.item_main_center,
layoutScrollview, false);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
screenWidth / 3, ViewGroup.LayoutParams.WRAP_CONTENT);
view.setLayoutParams(params);
((TextView) view.findViewById(R.id.top_tv_value)).setText("");
((TextView) view.findViewById(R.id.top_tv_name)).setText("");
layoutScrollview.addView(view);
}
}


为了方便操作,如果需要显示的item数不是3的倍数,则用空白view填充,以便方便计算与滚动。

【二】控制ScrollView每次滚动的距离与相应操作

mScrollView.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mOldScrollX = mScrollView.getScrollX();
break;
case MotionEvent.ACTION_UP:
mCurScrollX = mScrollView.getScrollX();
//每次手滑动距离大于200或者小于-200才可以触发ScrolView滚动一屏幕距离,否则恢复原位
if ((mCurScrollX - mOldScrollX) > 200) {
mScrollView.scrollTo(mOldScrollX + screenWidth, 0);
} else if ((mCurScrollX - mOldScrollX) < -200) {
mScrollView.scrollTo(mOldScrollX - screenWidth, 0);
} else {
mScrollView.scrollTo(mOldScrollX, 0);
}
break;
}
return false;

}
});


【三】控制ScrollView惯性滚动

//为了阻止惯性滚动,自定义ScrollView并且重写fling方法,设置velocity / 1000这是关键。
@Override
public void fling(int velocity) {
super.fling(velocity / 1000);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐