SwipeDistanceCalculator


侧滑距离计算器

默认情况下,用户手指移动的距离就是UI需要呈现的侧滑距离。

某些情况下我们并不想这样,比如要实现阻力滑动效果,实际UI展示的移动距离占手指移动距离的60%。

这时我们就需要在侧滑事件触发移动后,在consumer消费这个侧滑距离之前,对它进行一次加工,并将加工后的距离交给consumer去消费:展示到UI上。

接口定义如下:

public interface SwipeDistanceCalculator {
    /**
     * 计算侧滑距离
     * @param swipeDistance 侧滑的距离
     * @param progress 当前侧滑进度,其取值范围为 [0, 1 + consumer.getOverSwipeFactor())]
     * @return 展示在UI上的侧滑距离
     */
    int calculateSwipeDistance(int swipeDistance, float progress);

    /**
     * 作为calculateSwipeDistance的反向运算,这个方法是要计算使用这个计算器后,UI从关闭状态到打开状态,所需侧滑的距离
     * @param openDistance 不使用计算器时,打开状态所需侧滑的距离
     * @return 从关闭状态到打开状态所需侧滑的距离
     */
    int calculateSwipeOpenDistance(int openDistance);
}

SmartSwipe中内置了一个带阻力效果的计算器

public class ScaledCalculator implements SwipeDistanceCalculator {

    //阻力系数
    private float mScale;

    public ScaledCalculator(float scale) {
        if (scale <= 0) {
            throw new IllegalArgumentException("scale must be positive");
        }
        this.mScale = scale;
    }

    @Override
    public int calculateSwipeDistance(int swipeDistance, float progress) {
        //对实际侧滑的距离作阻力计算
        return (int) (swipeDistance * mScale);
    }

    @Override
    public int calculateSwipeOpenDistance(int openDistance) {
        //计算从关闭状态到打开状态所需侧滑的距离
        return (int) (openDistance / mScale);
    }
}
Copyright © qibilly.com 2019 all right reserved,powered by Gitbook最后修改时间: 2019-07-09 19:01:18

results matching ""

    No results matching ""