今天,看了让GridView不会自动滚动的两种方法.顺便做点记录
这两种方法都需要重写GridView..下面看代码
//第一种方法重写dispatchTouchEvent
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if(ev.getAction() == MotionEvent.ACTION_MOVE)
{
return true;
}
return super.dispatchTouchEvent(ev);
}
//第二种方法重写onMeasure方法@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); }
public boolean dispatchTouchEvent(MotionEvent event) { if (!onFilterTouchEventForSecurity(event)) { return false; } if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED && mOnTouchListener.onTouch(this, event)) { return true; } return onTouchEvent(event); }
源码上定义了,当有OnTouchListener ,或者onTouch方法时,(中间那个不是太懂,水平不足请高手留言告知...求不喷),返回true.
这里返回true的意思是,该方法已经处理完这个事件了,然后把事件再分发出去,要是不返回true,即表示此动作被拦截.其他监听器,控件就不能获得这个事件了.(详情查看文档,记得不是很清楚了)
所以第一个方法就是当这个方法拦截到的MotionEvent是移动的时候,把这个事件分发出去给其他控件,或者监听器处理.
第二个方法没有详细看过,网上给的意思是,这样处理会让GridView强制适应其里面的控件数,伸缩大小