package com.smartisanos.sidebar.view; import android.content.Context; import android.content.res.Configuration; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.Matrix; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import com.smartisanos.sidebar.R; import com.smartisanos.sidebar.util.anim.Anim; import com.smartisanos.sidebar.util.anim.AnimListener; import com.smartisanos.sidebar.util.anim.AnimTimeLine; import com.smartisanos.sidebar.util.anim.Vector3f; public class TopItemView extends FrameLayout implements ITopItem { private static final int ANIM_DURA = 300; private View mContentGroup; private TextView mTextView; private ImageView mIcon; private View mBackDimView; private View mTopDimView; private boolean mDim = false; private int mTextResId, mIconResId, mIconDimResId; private int mIconContentPaddingTop = 0; public TopItemView(Context context) { this(context, null); } public TopItemView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public TopItemView(Context context, AttributeSet attrs, int defStyleAttr) { this(context, attrs, defStyleAttr, 0); } public TopItemView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TopItemView); mIconContentPaddingTop = ta.getDimensionPixelSize(R.styleable.TopItemView_icon_content_paddingTop, 0); } @Override protected void onFinishInflate() { super.onFinishInflate(); mContentGroup = findViewById(R.id.content_group); mTextView = (TextView) findViewById(R.id.text); mIcon = (ImageView) findViewById(R.id.icon); mBackDimView = findViewById(R.id.back_dim_view); mTopDimView = findViewById(R.id.top_dim_view); } public void setText(int resId) { mTextResId = resId; mTextView.setText(mTextResId); } public void setIconBackground(int resId, int dimResId) { mIconResId = resId; mIconDimResId = dimResId; mIcon.setBackgroundResource(mIconResId); } public AnimTimeLine dim(){ Anim anim = new Anim(mTopDimView, Anim.TRANSPARENT, ANIM_DURA, Anim.CUBIC_OUT, new Vector3f(), new Vector3f(0, 0, 1)); AnimTimeLine timeLine = new AnimTimeLine(); timeLine.addAnim(anim); timeLine.setAnimListener(new AnimListener() { @Override public void onStart() { setClickable(false); mTopDimView.setVisibility(View.VISIBLE); mBackDimView.setVisibility(View.GONE); mDim = true; updateView(); } @Override public void onComplete(int type) { } }); return timeLine; } public AnimTimeLine highlight() { AnimTimeLine timeLine = new AnimTimeLine(); Anim scaleAnim = new Anim(mContentGroup, Anim.SCALE, ANIM_DURA, Anim.CUBIC_OUT, new Vector3f(1, 1), new Vector3f(1.05f, 1.05f)); Anim alphaAnim = new Anim(mBackDimView, Anim.TRANSPARENT, ANIM_DURA, Anim.CUBIC_OUT, new Vector3f(), new Vector3f(0, 0, 1)); timeLine.addAnim(scaleAnim); timeLine.addAnim(alphaAnim); timeLine.setAnimListener(new AnimListener() { @Override public void onStart() { mTopDimView.setVisibility(View.GONE); mBackDimView.setVisibility(View.VISIBLE); mDim = false; updateView(); } @Override public void onComplete(int type) { } }); return timeLine; } public AnimTimeLine resume() { AnimTimeLine timeLine = new AnimTimeLine(); if (mBackDimView.getVisibility() != View.GONE) { Anim scaleAnim = new Anim(mContentGroup, Anim.SCALE, ANIM_DURA, Anim.CUBIC_OUT, new Vector3f(1.05f, 1.05f), new Vector3f(1, 1)); Anim alphaAnim = new Anim(mBackDimView, Anim.TRANSPARENT, ANIM_DURA, Anim.CUBIC_OUT, new Vector3f(0, 0, 1), new Vector3f()); AnimTimeLine removeHighLightAnim = new AnimTimeLine(); removeHighLightAnim.addAnim(scaleAnim); removeHighLightAnim.addAnim(alphaAnim); removeHighLightAnim.setAnimListener(new AnimListener() { @Override public void onStart() { setClickable(true); mDim = false; updateView(); } @Override public void onComplete(int type) { mContentGroup.setScaleX(1); mContentGroup.setScaleY(1); mBackDimView.setVisibility(View.GONE); } }); timeLine.addTimeLine(removeHighLightAnim); } if (mTopDimView.getVisibility() != View.GONE) { Anim alphaAnim = new Anim(mTopDimView, Anim.TRANSPARENT, ANIM_DURA, Anim.CUBIC_OUT, new Vector3f(0, 0, 1), new Vector3f()); alphaAnim.setListener(new AnimListener() { @Override public void onStart() { setClickable(true); mDim = false; updateView(); } @Override public void onComplete(int type) { mTopDimView.setVisibility(View.GONE); } }); timeLine.addAnim(alphaAnim); } return timeLine; } public void setIconContentPaddingTop(int padding){ mIconContentPaddingTop = padding; } /** * should ensure pass the corrent formatted bitmap */ public void setIconContent(Bitmap bitmap){ Matrix matrix = mIcon.getMatrix(); matrix.postTranslate((mIcon.getWidth() - bitmap.getWidth()) / 2, mIconContentPaddingTop); mIcon.setImageMatrix(matrix); mIcon.setImageBitmap(bitmap); } /** * should ensure pass the corrent formatted bitmap */ public void setIconContent(Drawable drawable){ Matrix matrix = mIcon.getMatrix(); matrix.postTranslate((mIcon.getWidth() - drawable.getIntrinsicWidth()) / 2, mIconContentPaddingTop); mIcon.setImageMatrix(matrix); mIcon.setImageDrawable(drawable); } public void resetIconContent(){ mIcon.setImageDrawable(null); } private void updateView() { if (mTextResId != 0) { mTextView.setText(mTextResId); } if (!mDim) { mIcon.setBackgroundResource(mIconResId); mTextView.setTextColor(mContext.getResources().getColor(R.color.topbar_text_color)); } else { mIcon.setBackgroundResource(mIconDimResId); mTextView.setTextColor(mContext.getResources().getColor(R.color.topbar_text_dim_color)); } } @Override public void onConfigurationChanged(Configuration newConfig) { updateView(); } }