android 继承framelayout,求教下面这个自定义FrameLayout的作用是什么,看了半天没看懂...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

/*

* Copyright (C) 2016 The Android Open Source Project

*

* Licensed under the Apache License, Version 2.0 (the "License");

* you may not use this file except in compliance with the License.

* You may obtain a copy of the License at

*

* http://www.apache.org/licenses/LICENSE-2.0

*

* Unless required by applicable law or agreed to in writing, software

* distributed under the License is distributed on an "AS IS" BASIS,

* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

* See the License for the specific language governing permissions and

* limitations under the License.

*/

package com.android.systemui.recents.views;

import android.content.Context;

import android.graphics.Rect;

import android.util.AttributeSet;

import android.widget.FrameLayout;

/**

* This is an optimized FrameLayout whose layout is completely directed by its parent, and as a

* result, does not propagate requestLayout() up the view hierarchy. Instead, it will

* relayout its children with the last known layout bounds when a layout is requested from a child

* view.

*/

public class FixedSizeFrameLayout extends FrameLayout {

private final Rect mLayoutBounds = new Rect();

public FixedSizeFrameLayout(Context context) {

super(context);

}

public FixedSizeFrameLayout(Context context, AttributeSet attrs) {

super(context, attrs);

}

public FixedSizeFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

public FixedSizeFrameLayout(Context context, AttributeSet attrs, int defStyleAttr,

int defStyleRes) {

super(context, attrs, defStyleAttr, defStyleRes);

}

@Override

protected final void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

measureContents(MeasureSpec.getSize(widthMeasureSpec),

MeasureSpec.getSize(heightMeasureSpec));

}

@Override

protected final void onLayout(boolean changed, int left, int top, int right, int bottom) {

mLayoutBounds.set(left, top, right, bottom);

layoutContents(mLayoutBounds, changed);

}

@Override

public final void requestLayout() {

// The base ViewGroup constructor attempts to call requestLayout() before this class's

// members are initialized so we should just propagate in that case

if (mLayoutBounds == null || mLayoutBounds.isEmpty()) {

super.requestLayout();

} else {

// If we are already laid out, then just reuse the same bounds to layout the children

// (but not itself)

// TODO: Investigate whether we should coalesce these to the next frame if needed

measureContents(getMeasuredWidth(), getMeasuredHeight());

layoutContents(mLayoutBounds, false);

}

}

/**

* Measures the contents of this fixed layout.

*/

protected void measureContents(int width, int height) {

super.onMeasure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.AT_MOST),

MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST));

}

/**

* Lays out the contents of this fixed layout.

*/

protected void layoutContents(Rect bounds, boolean changed) {

super.onLayout(changed, bounds.left, bounds.top, bounds.right, bounds.bottom);

int width = getMeasuredWidth();

int height = getMeasuredHeight();

onSizeChanged(width, height, width, height);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值