/* * Copyright (C) 2013 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.example.android.expandingcells; import android.content.Context; import android.util.AttributeSet; import android.widget.RelativeLayout; /** * This layout is used to contain the extra information that will be displayed * when a certain cell is expanded. The custom relative layout is created in * order to achieve a fading affect of this layout's contents as it is being * expanded or collapsed as opposed to just fading the content in(out) after(before) * the cell expands(collapses). * * During expansion, layout takes place so the full contents of this layout can * be displayed. When the size changes to display the full contents of the layout, * its height is stored. When the view is collapsing, this layout's height becomes 0 * since it is no longer in the visible part of the cell.By overriding onMeasure, and * setting the height back to its max height, it is still visible during the collapse * animation, and so, a fade out effect can be achieved. */ public class ExpandingLayout extends RelativeLayout { private OnSizeChangedListener mSizeChangedListener; private int mExpandedHeight = -1; public ExpandingLayout(Context context) { super(context); } public ExpandingLayout(Context context, AttributeSet attrs) { super(context, attrs); } public ExpandingLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) { if (mExpandedHeight > 0) { heightMeasureSpec = MeasureSpec.makeMeasureSpec(mExpandedHeight, MeasureSpec.AT_MOST); } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } protected void onSizeChanged (int w, int h, int oldw, int oldh) { mExpandedHeight = h; //Notifies the list data object corresponding to this layout that its size has changed. mSizeChangedListener.onSizeChanged(h); } public int getExpandedHeight() { return mExpandedHeight; } public void setExpandedHeight(int expandedHeight) { mExpandedHeight = expandedHeight; } public void setSizeChangedListener(OnSizeChangedListener listener) { mSizeChangedListener = listener; } }