这是一个支持横向滑动,并处理了滑动冲突的自定义ViewGroup。几乎涵盖了自定义viewGroup的所有知识,对于理解View的相关知识有一定的帮助,是一个不错的实战Demo。以下为功能,所做的处理及对应的知识点。

1.支持横向滑动
为了使布局能够横向滑动,需要重写onTouchEvent()方法,在这个方法中判断是否为横向滑动,如果是的话就使用scrollBy()方法让布局内容滑动。当用户快速滑动时,使用Tracker判断速度是否为横向滑动,如果是的话使用Scroller使布局内容平滑滑动。具体判断方法如下代码。(当然需先判断是否拦截事件)。
//滑动事件处理
@Override
public boolean onTouchEvent(MotionEvent event) {
tracker.addMovement(event);
int x = (int)event.getX();
int y = (int)event.getY();
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
if(!scroller.isFinished()){
scroller.abortAnimation();
}
break;
case MotionEvent.ACTION_MOVE:
int deltaX = x-lastX;
int deltaY = y-lastY;
//每次进行滑动限制
scrollBy(-scrollLimit(deltaX),0);
break;
case MotionEvent.ACTION_UP:
int dx=0;
//处理快速滑动
tracker.computeCurrentVelocity(1000);
float xVelocity = tracker.getXVelocity();
if(Math.abs(xVelocity)>=50){
dx = 0-scrollLimit((int)xVelocity);
}
//使用Scroller
smoothScrollBy(dx,0);
tracker.clear();

本文介绍了一个自定义的HorizontalScrollView,它支持横向滑动并解决了滑动冲突问题。内容涵盖滑动范围限制、wrap_content支持、margin和padding处理。详细讲解了每个功能的实现原理和代码示例,是理解Android自定义ViewGroup的实战教程。
最低0.47元/天 解锁文章
511

被折叠的 条评论
为什么被折叠?



