android nice,Android很nice的Spinner(NiceSpinner)

importandroid.content.Context;

importandroid.util.AttributeSet;

importandroid.util.DisplayMetrics;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.AbsListView;

importandroid.widget.AdapterView;

importandroid.widget.BaseAdapter;

importandroid.widget.ImageView;

importandroid.widget.ListView;

importandroid.widget.PopupWindow;

importandroid.widget.RelativeLayout;

importandroid.widget.TextView;

importjava.util.ArrayList;

/*** Created by seven on 2016/4/28.*/public classNiceSpinnerextendsRelativeLayoutimplementsView.OnClickListener {

private static final intDEFAULT_MORE_COUNT= 5;

privateContext mContext;

//PopupWindow对象声明privatePopupWindowmPopupWindow;

privateArrayList mList;

privateViewmPopView;

//当前选中的列表项位置private intclickPsition= 0;

privateTextViewspinnerText;

privateImageViewarrowImg;

privateNiceSpinnerCallBack mCallBack;

privateListViewAdaptermAdapter;

private intmoreCount;//加载更多数据private intmRowNum;//最多显示多少条数据private intmDefaultCount;//最多显示多少条数据publicNiceSpinner(Context context) {

super(context);

mContext= context;

init();

}

publicNiceSpinner(Context context, AttributeSet attrs) {

super(context, attrs);

mContext= context;

init();

}

public voidinit() {

DisplayMetricsdm = mContext.getResources().getDisplayMetrics();

intscreenWidth = dm.widthPixels;

intscreenHeigh = dm.heightPixels;

this.setOnClickListener(this);

spinnerText= newTextView(mContext);

spinnerText.setId(R.id.spinner_text);

RelativeLayout.LayoutParamstextParams = newRelativeLayout.LayoutParams(screenWidth / 6, LayoutParams.WRAP_CONTENT);

textParams.addRule(RelativeLayout.CENTER_IN_PARENT);

arrowImg= newImageView(mContext);

arrowImg.setImageResource(R.drawable.icon_spinner_arrow);

RelativeLayout.LayoutParamsimageParams = newRelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

imageParams.addRule(RelativeLayout.CENTER_VERTICAL);

imageParams.addRule(RelativeLayout.RIGHT_OF, spinnerText.getId());

this.addView(spinnerText, textParams);

this.addView(arrowImg, imageParams);

//通过布局注入器,注入布局给View对象mPopView= LayoutInflater.from(mContext).inflate(R.layout.layout_nice_spinner, null);

//通过view 和宽·高,构造PopopWindowmPopupWindow= newPopupWindow(mPopView, ViewGroup.LayoutParams.MATCH_PARENT,

screenHeigh / 3, true);

//此处为popwindow 设置背景,同事做到点击外部区域,popwindow消失mPopupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_white));

}

public voidsetText(Stringtext) {

spinnerText.setText(text);

}

public voidsetDataList(ArrayList list) {

this.mList= list;

if(spinnerText.getText().toString() == null||

spinnerText.getText().toString().equals(""))

spinnerText.setText(this.mList.get(0));

}

@Overridepublic voidonClick(Viewv) {

//设置焦点为可点击mPopupWindow.setFocusable(true);//可以试试设为false的结果//将window视图显示在NiceSpinner下面mPopupWindow.showAsDropDown(this);

ListViewlv = (ListView) mPopView.findViewById(R.id.list_nice_spinner);

mAdapter= newListViewAdapter(mContext, mList);

lv.setAdapter(mAdapter);

lv.setOnItemClickListener(newAdapterView.OnItemClickListener() {

@Overridepublic voidonItemClick(AdapterView> parent, Viewview,

intposition, longid) {

if(clickPsition!= position) {

clickPsition= position;

}

mPopupWindow.dismiss();

moreCount= 0;

if(mCallBack!= null) {

mCallBack.setText(mList.get(position));

}

}

});

lv.setOnScrollListener(newAbsListView.OnScrollListener() {

@Overridepublic voidonScrollStateChanged(AbsListView view, intscrollState) {

// 判断滚动到底部if(view.getLastVisiblePosition() == view.getCount() - 1) {

if(mCallBack!= null&& moreCount< mRowNum- mDefaultCount) {

moreCount+= DEFAULT_MORE_COUNT;

mCallBack.loadData(moreCount, NiceSpinner.this);

}

}

}

@Overridepublic voidonScroll(AbsListView view, intfirstVisibleItem, intvisibleItemCount, inttotalItemCount) {

}

});

lv.setSelection(clickPsition);

}

public intgetCurrentPosition() {

returnclickPsition;

}

public voidsetDataCount(introwNum, intdefaultCount) {

mRowNum= rowNum;

mDefaultCount= defaultCount;

}

public voidrefresh(ArrayList list) {

if(mAdapter!= null) {

this.mList= list;

mAdapter.setDataList(list);

mAdapter.notifyDataSetChanged();

}

}

private classListViewAdapterextendsBaseAdapter {

privateLayoutInflater inflater;

privateArrayList list;

publicListViewAdapter(Context context, ArrayList list) {

super();

this.inflater= LayoutInflater.from(context);

this.list= list;

}

public voidsetDataList(ArrayList list) {

this.list= list;

}

@Overridepublic intgetCount() {

returnlist.size();

}

@OverridepublicObjectgetItem(intposition) {

//TODO Auto-generated method stubreturn null;

}

@Overridepublic longgetItemId(intposition) {

//TODO Auto-generated method stubreturn0;

}

@OverridepublicViewgetView(intposition, ViewconvertView, ViewGroup parent) {

if(convertView== null) {

convertView= inflater.inflate(R.layout.item_nice_spinner, null);

}

TextViewtv = (TextView) convertView.findViewById(R.id.spinner_text);

tv.setText(list.get(position));

ImageViewimgView = (ImageView) convertView.findViewById(R.id.spinner_select);

if(clickPsition== position) {

imgView.setVisibility(View.VISIBLE);

} else{

imgView.setVisibility(View.INVISIBLE);

}

returnconvertView;

}

}

/*** listView回调接口*/public interfaceNiceSpinnerCallBack {

voidloadData(intmoreCount,Viewview);

voidsetText(Stringtext);

}

public voidaddCallBack(NiceSpinnerCallBack callBack) {

this.mCallBack= callBack;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值