Android RippleForeground有界模式实现

时间:2015-10-10 14:11:39

标签: android graphics rippledrawable

我正在阅读RippleDrawableRippleForeground(软件渲染部分)的实现,我已经知道有界限意味着纹波有一个掩码。

但我仍然对实施的某些方面感到困惑:

  1. 为什么实现会说"Bounded ripples don't have enter animations"而只是跳过输入动画呢?在这种情况下如何启动波纹动画(如果用户没有释放他的触摸因此没有触发退出)?

    @Override
    protected Animator createSoftwareEnter(boolean fast) {
        // Bounded ripples don't have enter animations.
        if (mIsBounded) {
            return null;
        }
        ...
    }
    
  2. 为什么实施为random()nearly constant value选择mTargetRadius(为什么mBoundedRadius)?如果使用ColorDrawable屏蔽的视图大于该大小,它会正常工作吗?

    public RippleForeground(RippleDrawable owner, Rect bounds, float startingX, float startingY,
            boolean isBounded) {
        ...
        if (isBounded) {
            mBoundedRadius = MAX_BOUNDED_RADIUS * 0.9f
                    + (float) (MAX_BOUNDED_RADIUS * Math.random() * 0.1);
        }
        ...
    }
    
    ...
    
    private void computeBoundedTargetValues() {
        ...
        mTargetRadius = mBoundedRadius;
    }
    

1 个答案:

答案 0 :(得分:1)

对于第一个问题,我通过深入研究提交历史并尝试新的棉花糖图像来找到答案。答案很简单:

他们删除了有界RippleDrawable触摸时的(前景)波纹,但不是为了无界限,故意留下这种不一致。

我刚刚测试了Android SDK的Marshmallow图像。它被删除了,更糟糕的是,它们在用户首次触摸屏幕而不是手指从屏幕上抬起的位置留下了出现的波纹。

Ripple on Marshmallow

我无法理解这个设计决定,因为它看起来像是一个回归,而不仅仅是对我的改进,但是在提交日志中,他们认为他们做了implement bounded ripple animation,而不是删除它。

但是对于第二个问题,我还没有得到答案。