این وبسایت یک نسخه آزمایشی از سایت developer android می‌باشد که در حال ترجمه می‌باشد.
برای پیوستن به تیم ترجمه و خواندن مستندات اینجا کلیک کنید.
ActivitySceneTransitionBasic / src / com.example.android.activityscenetransitionbasic /

SquareFrameLayout.java

1
/*
2
 * Copyright (C) 2014 The Android Open Source Project
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
 
17
package com.example.android.activityscenetransitionbasic;
18
 
19
import android.content.Context;
20
import android.util.AttributeSet;
21
import android.widget.FrameLayout;
22
 
23
/**
24
 * {@link android.widget.FrameLayout} which forces itself to be laid out as square.
25
 */
26
public class SquareFrameLayout extends FrameLayout {
27
 
28
    public SquareFrameLayout(Context context) {
29
        super(context);
30
    }
31
 
32
    public SquareFrameLayout(Context context, AttributeSet attrs) {
33
        super(context, attrs);
34
    }
35
 
36
    public SquareFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
37
        super(context, attrs, defStyleAttr);
38
    }
39
 
40
    public SquareFrameLayout(Context context, AttributeSet attrs,
41
            int defStyleAttr, int defStyleRes) {
42
        super(context, attrs, defStyleAttr, defStyleRes);
43
    }
44
 
45
    @Override
46
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
47
        final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
48
        final int heightSize = MeasureSpec.getSize(heightMeasureSpec);
49
 
50
        if (widthSize == 0 && heightSize == 0) {
51
            // If there are no constraints on size, let FrameLayout measure
52
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
53
 
54
            // Now use the smallest of the measured dimensions for both dimensions
55
            final int minSize = Math.min(getMeasuredWidth(), getMeasuredHeight());
56
            setMeasuredDimension(minSize, minSize);
57
            return;
58
        }
59
 
60
        final int size;
61
        if (widthSize == 0 || heightSize == 0) {
62
            // If one of the dimensions has no restriction on size, set both dimensions to be the
63
            // on that does
64
            size = Math.max(widthSize, heightSize);
65
        } else {
66
            // Both dimensions have restrictions on size, set both dimensions to be the
67
            // smallest of the two
68
            size = Math.mi