Pull up to refresh xListView

public class XListViewHeader extends LinearLayout {

private LinearLayout mContainer;

private ImageView mArrowImageView;

private ProgressBar mProgressBar;

private TextView mHintTextView;

private int mState = STATE_NORMAL;

 

private Animation mRotateUpAnim;

private Animation mRotateDownAnim;

 

private final int ROTATE_ANIM_DURATION = 180;

 

public final static int STATE_NORMAL = 0;

public final static int STATE_READY = 1;

public final static int STATE_REFRESHING = 2;

 

public XListViewHeader(Context context) {

super(context);

initView(context);

}

 

/**

 * @param context

 * @param attrs

 */

public XListViewHeader(Context context, AttributeSet attrs) {

super(context, attrs);

initView(context);

}

 

private void initView(Context context) {

// Initially, set the drop-down refresh view height to 0

LayoutParams lp = new LayoutParams(

LayoutParams.FILL_PARENT, 0);

mContainer = (LinearLayout) LayoutInflater.from(context).inflate(

R.layout.xlistview_header, null);

addView(mContainer, lp);

setGravity(Gravity.BOTTOM);

 

mArrowImageView = (ImageView)findViewById(R.id.xlistview_header_arrow);

mHintTextView = (TextView)findViewById(R.id.xlistview_header_hint_textview);

mProgressBar = (ProgressBar)findViewById(R.id.xlistview_header_progressbar);

 

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);

}

 

public void setState(int state) {

if (state == mState) return ;

 

if (state == STATE_REFRESHING) { // show progress

mArrowImageView.clearAnimation();

mArrowImageView.setVisibility(View.INVISIBLE);

mProgressBar.setVisibility(View.VISIBLE);

} else { // show arrow image

mArrowImageView.setVisibility(View.VISIBLE);

mProgressBar.setVisibility(View.INVISIBLE);

}

 

switch(state){

case STATE_NORMAL:

if (mState == STATE_READY) {

mArrowImageView.startAnimation(mRotateDownAnim);

}

if (mState == STATE_REFRESHING) {

mArrowImageView.clearAnimation();

}

mHintTextView.setText(R.string.xlistview_header_hint_normal);

break;

case STATE_READY:

if (mState != STATE_READY) {

mArrowImageView.clearAnimation();

mArrowImageView.startAnimation(mRotateUpAnim);

mHintTextView.setText(R.string.xlistview_header_hint_ready);

}

break;

case STATE_REFRESHING:

mHintTextView.setText(R.string.xlistview_header_hint_loading);

break;

default:

}

 

mState = state;

}

 

public void setVisiableHeight(int height) {

if (height < 0)

height = 0;

LayoutParams lp = (LayoutParams) mContainer

.getLayoutParams();

lp.height = height;

mContainer.setLayoutParams (lp);

}

 

public int getVisiableHeight() {

return mContainer.getLayoutParams().height;

}

 

}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324738139&siteId=291194637