Android水平滚动视图的行为类似于iPhone(分页)
我在水平滚动视图中有一个线性布局。内容只是一个图像。在滚动时,我需要实现与在iPhone上设置分页选项(相当于HSW)时相同的行为(滚动列表应该在列表上的每一页停止,而不是继续移动) 这在Android中是如何实现的?我应该自己实现这些功能,还是要设置特定属性或实现HSV的子类?因此,我的解决方案是:Android水平滚动视图的行为类似于iPhone(分页),android,image,scroll,paging,Android,Image,Scroll,Paging,我在水平滚动视图中有一个线性布局。内容只是一个图像。在滚动时,我需要实现与在iPhone上设置分页选项(相当于HSW)时相同的行为(滚动列表应该在列表上的每一页停止,而不是继续移动) 这在Android中是如何实现的?我应该自己实现这些功能,还是要设置特定属性或实现HSV的子类?因此,我的解决方案是: 截取onTouch事件并计算页面是否应更改为下一个页面或保持当前页面 从HorizontalScrollView继承并重写computeScroll方法 该方法计算croll调用以移动列表。默认情
_scrollView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP)
{
float currentPosition = _scrollView.getScrollX();
float pagesCount = _horizontalBar.getChildCount();
float pageLengthInPx = _horizontalBar.getMeasuredWidth()/pagesCount;
float currentPage = currentPosition/pageLengthInPx;
Boolean isBehindHalfScreen = currentPage-(int)currentPage > 0.5;
float edgePosition = 0;
if(isBehindHalfScreen)
{
edgePosition = (int)(currentPage+1)*pageLengthInPx;
}
else
{
edgePosition = (int)currentPage*pageLengthInPx;
}
_scrollView.scrollTo((int)edgePosition, 0);
}
return false;
}
});
在我继承的横向观点中
@Override
public void computeScroll (){
return;
}
我在这里找到了一个很好的解决方案: 这是一个经过清理的GitHub版本的代码,可在此处找到: 仅仅在图像上使用它似乎有些过分,但这个解决方案允许使用一个小技巧进行无限分页(即:当在第一页时,您可以向后滚动到最后一页,当在最后一页时,您可以向前滚动到第一页)。它还允许您拥有未知数量的页面,并通过使用另一个小技巧动态生成内容。请看我在第二个链接中的评论 详细了解我是如何做到这一点的
希望这能有所帮助。Android中的新兼容性软件包(第3版)添加了一个ViewPager,可以实现这一点
我找到了另一种方法来获得同样的效果,我认为它更具可读性。方法如下:
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP)
{
float currentPosition = hsv.getScrollX();
float pagesCount = hsv.getChildCount();
float pageLengthInPx = hsv.getMeasuredWidth()/pagesCount;
int page = (int) (Math.floor((currentPosition - pageLengthInPx / 2) / pageLengthInPx) + 1);
hsv.scrollTo((int) (page * pageLengthInPx), 0);
}
return false;
}
水平页面或真实视图切换器的问题是,如果您将ListView作为子视图添加,并且ListView没有超过屏幕的高度,则中间的空间(从ListView的最后一行到屏幕的末尾)将填充“白色”或透明背景。关于这个问题有什么想法吗?这在ViewPagerSorry中已经过时了,但我不记得了。这是个老问题对不起:(其中hsv是对象HorizontalScrollView:PI认为HorizontalScrollView将只接受一个子项,这是某种布局组…该组是添加子项的位置,因此将从那里检索子项的数量。检查本教程,它可以工作,对于水平分页来说非常简单:ViewPager docs在这里:ViewPager教程在这里: