2

私はRippleForegroundRippleDrawable (ソフトウェア レンダリング部分) の実装を読んでいますが、境界があるということは、リップルにマスクがあることを意味することを既に知っていました。

しかし、私はまだ実装のいくつかの点で混乱しています:

  1. 実装で「境界のある波紋には開始アニメーションがありません」と表示され、単純に開始アニメーションがスキップされたのはなぜですか? この場合、リップル アニメーションを開始するにはどうすればよいですか (ユーザーがタッチを離していないため、終了が発生しない場合)。

    @Override
    protected Animator createSoftwareEnter(boolean fast) {
        // Bounded ripples don't have enter animations.
        if (mIsBounded) {
            return null;
        }
        ...
    }
    
  2. 実装が and に対してほぼ一定の値を選択したのはなぜですか(そして、それはなぜですかrandom()) ? でマスクされたビューがそのサイズよりも大きい場合、正しく機能しますか?mBoundedRadiusmTargetRadiusColorDrawable

    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;
    }
    
4

1 に答える 1

1

最初の質問については、コミット履歴を掘り下げて新しいマシュマロ イメージを試すことで、自分で答えを見つけました。答えは簡単です。

彼らは、bounded では (前景の) タッチ時の波紋を削除しましたRippleDrawableが、unbounded では削除せず、意図的にこの矛盾を残しました。

Android SDK の Marshmallow イメージでテストしました。それは削除され、さらに悪いことに、ユーザーが画面から指を離した場所ではなく、最初に画面に触れた場所に既存の波紋が残りました。

マシュマロに波紋

この設計上の決定は、私には改善というよりも回帰のように見えるため理解できませんが、コミット ログのように、制限されたリップル アニメーションを削除する代わりに実装したと信じています。

しかし、2 番目の質問については、まだ答えが得られていません。

于 2015-10-12T14:20:45.600 に答える