package com.bigdo.controls; import com.bigdo.app.R; import android.content.Context; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; public class XListViewFooter extends LinearLayout { public final static int STATE_NORMAL = 0; public final static int STATE_READY = 1; public final static int STATE_LOADING = 2; private int mState = STATE_NORMAL; LinearLayout mContainer; // private Context mContext; private Animation mRotateUpAnim; private Animation mRotateDownAnim; private ImageView mArrowImageView; private RelativeLayout mContentView, mExtension; private ProgressBar mProgressBar; private TextView mHintView; private final int ROTATE_ANIM_DURATION = 180; public XListViewFooter(Context context) { super(context); initView(context); // this.setBackgroundColor(color) } public XListViewFooter(Context context, AttributeSet attrs) { super(context, attrs); initView(context); } public void setState(int state) { if (state == mState) { return; } // mHintView.setVisibility(View.INVISIBLE); if (state == STATE_READY) { mProgressBar.setVisibility(View.GONE); mHintView.setVisibility(View.VISIBLE); mHintView.setText(R.string.xlistview_footer_hint_ready); mArrowImageView.setVisibility(View.VISIBLE); mArrowImageView.clearAnimation(); mArrowImageView.startAnimation(mRotateUpAnim); } else if (state == STATE_LOADING) { mProgressBar.setVisibility(View.VISIBLE); mHintView.setText(R.string.xlistview_header_hint_loading); mArrowImageView.clearAnimation(); mArrowImageView.setVisibility(View.GONE); } else { mProgressBar.setVisibility(View.GONE); mHintView.setVisibility(View.VISIBLE); mHintView.setText(R.string.xlistview_footer_hint_normal);// mArrowImageView.setVisibility(View.VISIBLE); mArrowImageView.clearAnimation(); mArrowImageView.startAnimation(mRotateDownAnim); } mState = state; } /** * normal status */ public void normal() { mHintView.setVisibility(View.VISIBLE); mProgressBar.setVisibility(View.GONE); } /** * loading status */ public void loading() { mHintView.setVisibility(View.GONE); mProgressBar.setVisibility(View.VISIBLE); } /** * hide footer when disable pull load more */ public void hide() { LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mContentView .getLayoutParams(); lp.height = 0; mContentView.setLayoutParams(lp); } /** * show footer */ public void show() { RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) mContentView .getLayoutParams(); lp.height = LayoutParams.WRAP_CONTENT; mContentView.setLayoutParams(lp); } private void initView(Context context) { setFocusable(true); // setFocusableInTouchMode(true); setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); try { mContainer = (LinearLayout) LayoutInflater.from(context).inflate( R.layout.xlistview_footer, null); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); addView(mContainer, lp); mContainer = (LinearLayout) findViewById(R.id.xlistview_footer_content_host); mExtension = (RelativeLayout) findViewById(R.id.xlistview_footer_extension_content_host); LinearLayout.LayoutParams lp1 = new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, 0); mContainer.setLayoutParams(lp1); setGravity(Gravity.TOP); mContentView = (RelativeLayout) mContainer .findViewById(R.id.xlistview_footer_content); mProgressBar = (ProgressBar) mContainer .findViewById(R.id.xlistview_footer_progressbar); mHintView = (TextView) mContainer .findViewById(R.id.xlistview_footer_hint_textview); mArrowImageView = (ImageView) findViewById(R.id.xlistview_footer_arrow); mRotateUpAnim = new RotateAnimation(0.0f, -180.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); mRotateUpAnim.setDuration(ROTATE_ANIM_DURATION); mRotateUpAnim.setFillAfter(true); mRotateDownAnim = new RotateAnimation(-180.0f, 0.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); mRotateDownAnim.setDuration(ROTATE_ANIM_DURATION); mRotateDownAnim.setFillAfter(true); } catch (Exception e) { } } public void setVisiableHeight(int height) { if (height < 0) { height = 0; } LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mContainer .getLayoutParams(); lp.height = height; mContainer.setLayoutParams(lp); } public int getVisiableHeight() { return mContainer.getHeight(); } public int getWindowTop() { int[] location = { 0, 0 }; mContainer.getLocationInWindow(location); return location[1]; } public int getWindowBottom() { int[] location = { 0, 0 }; mContainer.getLocationInWindow(location); return location[1] + mContainer.getHeight(); } public void addExtensionView(View v) { if (v == null) { mExtension.removeAllViews(); } else { mExtension.removeAllViews(); mExtension.addView(v); } } }