Android Open Source - XListView-Android X List View Header






From Project

Back to project page XListView-Android.

License

The source code is released under:

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, includi...

If you think the Android project XListView-Android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/**
 * @file XListViewHeader.java/* ww w  . j  av  a 2s .  c  o  m*/
 * @create Apr 18, 2012 5:22:27 PM
 * @author Maxwin
 * @description XListView's header
 */
package me.maxwin.view;

import me.maxwin.R;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
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.TextView;

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) {
    // ????????????view???0
    LinearLayout.LayoutParams lp = new LinearLayout.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) {  // ????
      mArrowImageView.clearAnimation();
      mArrowImageView.setVisibility(View.INVISIBLE);
      mProgressBar.setVisibility(View.VISIBLE);
    } else {  // ??????
      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;
    LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) mContainer
        .getLayoutParams();
    lp.height = height;
    mContainer.setLayoutParams(lp);
  }

  public int getVisiableHeight() {
    return mContainer.getHeight();
  }

}




Java Source Code List

me.maxwin.XListViewActivity.java
me.maxwin.view.XListViewFooter.java
me.maxwin.view.XListViewHeader.java
me.maxwin.view.XListView.java