TvViewUiManager.java 文件源码

java
阅读 22 收藏 0 点赞 0 评论 0

项目:android_packages_apps_tv 作者:
private void setTvViewPosition(final FrameLayout.LayoutParams layoutParams,
        MarginLayoutParams tvViewFrame, boolean animate) {
    if (DEBUG) {
        Log.d(TAG, "setTvViewPosition: w=" + layoutParams.width + " h=" + layoutParams.height
                + " s=" + layoutParams.getMarginStart() + " t=" + layoutParams.topMargin
                + " e=" + layoutParams.getMarginEnd() + " b=" + layoutParams.bottomMargin
                + " animate=" + animate);
    }
    MarginLayoutParams oldTvViewFrame = mTvViewFrame;
    mTvViewLayoutParams = layoutParams;
    mTvViewFrame = tvViewFrame;
    if (animate) {
        initTvAnimatorIfNeeded();
        if (mTvViewAnimator.isStarted()) {
            // Cancel the current animation and start new one.
            mTvViewAnimator.cancel();
            mOldTvViewFrame = mLastAnimatedTvViewFrame;
        } else {
            mOldTvViewFrame = oldTvViewFrame;
        }
        mTvViewAnimator.setObjectValues(mTvView.getLayoutParams(), layoutParams);
        mTvViewAnimator.setEvaluator(new TypeEvaluator<FrameLayout.LayoutParams>() {
            FrameLayout.LayoutParams lp;
            @Override
            public FrameLayout.LayoutParams evaluate(float fraction,
                    FrameLayout.LayoutParams startValue, FrameLayout.LayoutParams endValue) {
                if (lp == null) {
                    lp = new FrameLayout.LayoutParams(0, 0);
                    lp.gravity = startValue.gravity;
                }
                interpolateMarginsRelative(lp, startValue, endValue, fraction);
                return lp;
            }
        });
        mTvViewAnimator
                .setInterpolator(isTvViewFullScreen() ? mFastOutLinearIn : mLinearOutSlowIn);
        mTvViewAnimator.start();
    } else {
        if (mTvViewAnimator != null && mTvViewAnimator.isStarted()) {
            // Continue the current animation.
            // layoutParams will be applied when animation ends.
            return;
        }
        // This block is also called when animation ends.
        if (isTvViewFullScreen()) {
            // When this layout is for full screen, fix the surface size after layout to make
            // resize animation smooth. During PIP size change, the multiple messages can be
            // queued, if we don't remove MSG_SET_LAYOUT_PARAMS.
            mHandler.removeMessages(MSG_SET_LAYOUT_PARAMS);
            mHandler.obtainMessage(MSG_SET_LAYOUT_PARAMS, layoutParams).sendToTarget();
        } else {
            mTvView.setLayoutParams(layoutParams);
        }
        updatePipView(mTvViewFrame);
    }
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号