package com.caesar.PSL_demo.view;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.caesar.PSL_demo.R;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
* Created by Administrator on 2014/7/15.
*/
public class HeadView extends LinearLayout{
/** The mContext. */
private Context mContext;
/** The header view. */
private LinearLayout headerView;
/** The arrow image view. */
private ImageView arrowImageView;
/** The header progress bar. */
private ProgressBar headerProgressBar;
/** The tips textview. */
private TextView tipsTextview;
/** The header time view. */
private TextView headerTimeView;
/** The m state. */
private int mState = -1;
/** The m rotate up anim. */
private Animation mRotateUpAnim;
/** The m rotate down anim. */
private Animation mRotateDownAnim;
/** The rotate anim duration. */
private final int ROTATE_ANIM_DURATION = 180;
/** The Constant STATE_NORMAL. */
public final static int STATE_NORMAL = 0;
/** The Constant STATE_READY. */
public final static int STATE_READY = 1;
/** The Constant STATE_REFRESHING. */
public final static int STATE_REFRESHING = 2;
/** 保存上一次的刷新时间. */
private String lastRefreshTime = null;
/** The head content height. */
private int headerHeight;
/**
* Instantiates a new ab list view header.
*
* @param context the context
*/
public HeadView(Context context) {
super(context);
initView(context);
}
/**
* Instantiates a new ab list view header.
*
* @param context the context
* @param attrs the attrs
*/
public HeadView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}
/**
* Inits the view.
*
* @param context the context
*/
private void initView(Context context) {
mContext = context;
//顶部刷新栏整体内容
headerView = new LinearLayout(context);
headerView.setOrientation(LinearLayout.HORIZONTAL);
setBackgroundColor(Color.rgb(225, 225, 225));
headerView.setGravity(Gravity.CENTER);
headerView.setPadding(0, 5, 0, 5);
//显示箭头与进度
FrameLayout headImage = new FrameLayout(context);
arrowImageView = new ImageView(context);
//从包里获取的箭头图片
arrowImageView.setImageBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.goicon));
arrowImageView.setScaleType(ImageView.ScaleType.FIT_XY);
//style="?android:attr/progressBarStyleSmall" 默认的样式
headerProgressBar = new ProgressBar(context,null,android.R.attr.progressBarStyle);
headerProgressBar.setVisibility(View.GONE);
LinearLayout.LayoutParams layoutParamsWW = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
int w = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 23f, mContext.getResources().getDisplayMetrics());
int h = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 35f, mContext.getResources().getDisplayMetrics());
layoutParamsWW.gravity = Gravity.CENTER;
layoutParamsWW.width = w;
layoutParamsWW.height = h;
int i = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 25f, mContext.getResources().getDisplayMetrics());
//设置加载进度大小
LinearLayout.LayoutParams progressBarLP = new LinearLayout.LayoutParams(i, i);
progressBarLP.gravity=Gravity.CENTER;
headImage.addView(arrowImageView,layoutParamsWW);
headImage.addView(headerProgressBar,progressBarLP);
//顶部刷新栏文本内容
LinearLayout headTextLayout = new LinearLayout(context);
tipsTextview = new TextView(context);
headerTimeView = new TextView(context);
headTextLayout.setOrientation(LinearLayout.VERTICAL);
headTextLayout.setGravity(Gravity.CENTER_VERTICAL);
headTextLayout.setPadding(12,0,0,0);
LinearLayout.LayoutParams layoutParamsWW2 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
headTextLayout.addView(tipsTextview,layoutParamsWW2);
headTextLayout.addView(headerTimeView,layoutParamsWW2);
tipsTextview.setTextColor(Color.rgb(107, 107, 107));
headerTimeView.setTextColor(Color.rgb(107, 107, 107));
tipsTextview.setTextSize(15);
headerTimeView.setTextSize(14);
LinearLayout.LayoutParams layoutParamsWW3 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
layoutParamsWW3.gravity = Gravity.CENTER;
layoutParamsWW3.bottomMargin = 5;
layoutParamsWW3.topMargin = 5;
LinearLayout headerLayout = new LinearLayout(context);
headerLayout.setOrientation(LinearLayout.HORIZONTAL);
headerLayout.setGravity(Gravity.CENTER);
headerLayout.addView(headImage,layoutParamsWW3);
headerLayout.addView(headTextLayout,layoutParamsWW3);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.gravity = Gravity.BOTTOM;
//添加大布局
headerView.addView(headerLayout,lp);
this.addView(headerView,lp);
//获取View的高度
measureView(this);
headerHeight = this.getMeasuredHeight();
//向上偏移隐藏起来
headerView.setPadding(0, -1 * headerHeight, 0, 0);
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);
setState(STATE_NORMAL);
}
/**
* Sets the state.
*
* @param state the new state
*/
public void setState(int state) {
if (state == mState) return ;
if (state == STATE_REFRESHING) {
arrowImageView.clearAnimation();
arrowImageView.setVisibility(View.INVISIBLE);
headerProgressBar.setVisibility(View.VISIBLE);
} else {
arrowImageView.setVisibility(View.VISIBLE);
headerProgressBar.setVisibility(View.INVISIBLE);
}
switch(state){
case STATE_NORMAL:
if (mState == STATE_READY) {
arrowImageView.startAnimation(mRotateDownAnim);
}
if (mState == STATE_REFRESHING) {
arrowImageView.clearAnimation();
}
tipsTextview.setText("下拉刷新");
if(lastRefreshTime==null){
lastRefreshTime = getCurrentTiem("HH:mm:ss");
headerTimeView.setText("刷新时间:" + lastRefreshTime);
}else{
headerTimeView.setText("上次刷新时间:" + lastRefreshTime);
}
break;
case STATE_READY:
if (mState != STATE_READY) {
arrowImageView.clearAnimation();
arrowImageView.startAnimation(mRotateUpAnim);
tipsTextview.setText("松开刷新");
headerTimeView.setText("上次刷新时间:" + lastRefreshTime);
lastRefreshTime = getCurrentTiem("HH:mm:ss");
}
break;
case STATE_REFRESHING:
tipsTextview.setText("正在刷新...");
headerTimeView.setText("上次刷新时间:" + lastRefreshTime);
break;
default:
}
mState = state;
}
/**
* Sets the visiable height.
*
* @param height the new visiable height
*/
public void setVisiableHeight(int height) {
if (height < 0) height = 0;
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) headerView.getLayoutParams();
lp.height = height;
headerView.setLayoutParams(lp);
}
/**
* Gets the visiable height.
*
* @return the visiable height
*/
public int getVisiableHeight() {
LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams)headerView.getLayoutParams();
return lp.height;
}
/**
* 描述:获取HeaderView.
*
* @return the header view
*/
public LinearLayout getHeaderView() {
return headerView;
}
/**
* set last refresh time.
*
* @param time the new refresh time
*/
public void setRefreshTime(String time) {
headerTimeView.setText(time);
}
/**
* Gets the header height.
*
* @return the header height
*/
public int getHeaderHeight() {
return headerHeight;
}
/**
*
* 描述:设置字体颜色
* @param color
* @throws
*/
public void setTextColor(int color){
tipsTextview.setTextColor(color);
headerTimeView.setTextColor(color);
}
/**
*
* 描述:设置背景颜色
* @param color
* @throws
*/
public void setBackgroundColor(int color){
headerView.setBackgroundColor(color);
}
/**
*
* 描述:获取Header ProgressBar,用于设置自定义样式
* @return
* @throws
*/
public ProgressBar getHeaderProgressBar() {
return headerProgressBar;
}
/**
*
* 描述:设置Header ProgressBar样式
* @return
* @throws
*/
public void setHeaderProgressBarDrawable(Drawable indeterminateDrawable) {
headerProgressBar.setIndeterminateDrawable(indeterminateDrawable);
}
/**
* 测量view高度的方法
*
* @param view 目标视图
*/
private void measureView(View view){
if(view == null){
return;
}
int w = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
int h = View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
view.measure(w, h);
}
/**获得当前时间
*
* @param format 时间显示格式 'HH:mm:ss'
*/
private String getCurrentTiem(String format){
String curDateTime = null;
try {
SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(format);
Calendar c = new GregorianCalendar();
curDateTime = mSimpleDateFormat.format(c.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return curDateTime;
}
}