TouchSlop是系统所能识别出的被认为是滑动的最小距离,这是一个常量,并且和设备有关,在不同的设备上这个值是不同的,通过当前上下文获取方式如下:
ViewConfiguration.get(getContext()).getScaledTouchSlop();
下面简单通过源码来介绍,获取TouchSlop的过程:
public static ViewConfiguration get(Context context) {
final DisplayMetrics metrics = context.getResources().getDisplayMetrics();
final int density = (int) (100.0f * metrics.density);
ViewConfiguration configuration = sConfigurations.get(density);
if (configuration == null) {
configuration = new ViewConfiguration(context);
sConfigurations.put(density, configuration);
}
return configuration;
}
这里通过单例模式来获取一个ViewConfiguration实例,并通过其对应的像屏幕密度存储在sConfigurations在sConfigurations中:
static final SparseArray<ViewConfiguration> sConfigurations =
new SparseArray<ViewConfiguration>(2);
sConfigurations是一个容量为2的SparseArray,关于SparseArray可以查看相关资料,其主要作用是能优化内存,带来更好的性能提升。
在私有化的构造函数中,通过:
mTouchSlop = res.getDimensionPixelSize( com.android.internal.R.dimen.config_viewConfigurationTouchSlop);
获取TouchSlop常量,其定义如下:
<!-- Base "touch slop" value used by ViewConfiguration as a
movement threshold where scrolling should begin. -->
<dimen name="config_viewConfigurationTouchSlop">8dp</dimen>
最后,通过:
/**
* @return Distance in pixels a touch can wander before we think the user is scrolling
*/
public int getScaledTouchSlop() {
return mTouchSlop;
}
得到TouchSlop常量。