package com.fruit.launcher; import com.fruit.launcher.setting.SettingUtils; import com.fruit.launcher.theme.ThemeManager; import android.content.Context; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.RelativeLayout; public class ScreenIndicator extends ViewGroup { private int mScreenCount; private int mCurrentScreen; private int mDotSeparate; private ThemeManager mThemeMgr; public ScreenIndicator(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mScreenCount = SettingUtils.mScreenCount; mCurrentScreen = SettingUtils.mHomeScreenIndex; initIndicator(); } public ScreenIndicator(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ScreenIndicator(Context context) { super(context); // TODO Auto-generated constructor stub initIndicator(); } private void initIndicator() { setFocusable(false); setWillNotDraw(false); mDotSeparate = 10; mThemeMgr = ThemeManager.getInstance(); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { if (mScreenCount <= 0) { return; } createLayout(); } private void updateLayout() { for (int i = 0; i < getChildCount(); i++) { final ImageView img = (ImageView) getChildAt(i); img.setSelected((i == mCurrentScreen)); } } private void createLayout() { detachAllViewsFromParent(); // int dotWidth = Launcher.mScreenWidth / SettingUtils.mScreenCount; int dotWidth = mThemeMgr.loadScreenIndicatorIcon().getIntrinsicWidth(); int marginLeft = getWidth() / 2 - (mScreenCount * dotWidth / 2 + (mScreenCount - 1) * mDotSeparate / 2); int marginTop = getHeight() / 2 - dotWidth / 2; View currentView = null; for (int i = 0; i < mScreenCount; i++) { ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); ImageView dot = new ImageView(getContext()); Drawable drawable = mThemeMgr.loadScreenIndicatorIcon(); dot.setImageDrawable(drawable); dot.setLayoutParams(lp); int childHeightSpec = getChildMeasureSpec( MeasureSpec.makeMeasureSpec(dotWidth, MeasureSpec.UNSPECIFIED), 0, lp.height); int childWidthSpec = getChildMeasureSpec( MeasureSpec.makeMeasureSpec(dotWidth, MeasureSpec.EXACTLY), 0, lp.width); dot.measure(childWidthSpec, childHeightSpec); int left = marginLeft + i * (dotWidth + mDotSeparate); dot.layout(left, marginTop, left + dotWidth, marginTop + dotWidth); addViewInLayout(dot, getChildCount(), lp, true); if (i == mCurrentScreen) { currentView = dot; } } if (currentView != null) { currentView.setSelected(true); } postInvalidate(); } final int getScreenCount() { return mScreenCount; } final void setScreenCount(int count) { if (count != mScreenCount) { mScreenCount = count; createLayout(); } } final int getCurrentScreen() { return mCurrentScreen; } final void setCurrentScreen(int currentScreen) { if (currentScreen != mCurrentScreen) { mCurrentScreen = currentScreen; updateLayout(); } } final void apllyTheme() { removeAllViews(); createLayout(); } final void switchScreenMode(boolean bIsFullscreen, int value) { RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) getLayoutParams(); lp.topMargin = bIsFullscreen ? value : 0; setLayoutParams(lp); } }