如何获取TouchSlop和源码浅析

TouchSlop是Android中判断滑动的最小距离,它与设备相关并在不同设备上有不同值。本文介绍了如何通过单例模式获取ViewConfiguration实例,以及从SparseArray中获取TouchSlop的过程,强调了SparseArray在内存优化中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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常量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值