/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.view; import android.content.Context; import android.util.AttributeSet; import android.view.View; /** * * @author sihai * */ public class TabContainer extends ScrollableViewGroup { private int mFirstVisiblePanel; private int mLastVisiblePanel; private OnTabChangeListener mListener; private int mPanelWidth; private int mSelectedPanel; public TabContainer(Context context, AttributeSet attributeset) { super(context, attributeset); mFirstVisiblePanel = -1; mLastVisiblePanel = -1; setVertical(false); } protected void onLayout(boolean flag, int i, int j, int k, int l) { boolean flag1; int i1; if(mPanelWidth == 0) flag1 = true; else flag1 = false; mPanelWidth = k - i; i1 = l - j; for(int j1 = 0; j1 < getChildCount(); j1++) { View view = getChildAt(j1); int k1 = j1 * mPanelWidth; view.layout(k1, 0, k1 + mPanelWidth, i1); } setScrollLimits(0, mPanelWidth * (-1 + getChildCount())); if(flag1) scrollTo(mSelectedPanel * mPanelWidth); } public void onMeasure(int i, int j) { int k = android.view.View.MeasureSpec.getSize(i); int l = android.view.View.MeasureSpec.getSize(j); setMeasuredDimension(k, l); int i1 = android.view.View.MeasureSpec.makeMeasureSpec(k, 0x40000000); int j1 = android.view.View.MeasureSpec.makeMeasureSpec(l, 0x40000000); for(int k1 = 0; k1 < getChildCount(); k1++) getChildAt(k1).measure(i1, j1); } public void onScrollChanged(int i, int j, int k, int l) { int i1 = i / mPanelWidth; int j1; int k1; if(i % mPanelWidth == 0) j1 = 0; else j1 = 1; k1 = i1 + j1; if(i1 != mFirstVisiblePanel || k1 != mLastVisiblePanel) { mFirstVisiblePanel = i1; mLastVisiblePanel = k1; int l1 = 0; while(l1 < getChildCount()) { OnTabChangeListener ontabchangelistener = mListener; boolean flag; if(l1 >= mFirstVisiblePanel && l1 <= mLastVisiblePanel) flag = true; else flag = false; ontabchangelistener.onTabVisibilityChange(l1, flag); l1++; } } } protected final void onScrollFinished(int i) { if(mPanelWidth != 0) { int j = getScrollX(); if(i < 0) mSelectedPanel = j / mPanelWidth; else mSelectedPanel = 1 + j / mPanelWidth; if(mSelectedPanel >= getChildCount()) mSelectedPanel = -1 + getChildCount(); smoothScrollTo(mSelectedPanel * mPanelWidth); mListener.onTabSelected(mSelectedPanel); } } public void setOnTabChangeListener(OnTabChangeListener ontabchangelistener) { mListener = ontabchangelistener; } public void setSelectedPanel(int i) { if(mSelectedPanel != i) { mSelectedPanel = i; if(mPanelWidth != 0) smoothScrollTo(mPanelWidth * mSelectedPanel); } } //================================================================================================================== // Inner class //================================================================================================================== public static interface OnTabChangeListener { public abstract void onTabSelected(int i); public abstract void onTabVisibilityChange(int i, boolean flag); } }