activity
import android.os.Bundle;
import android.view.View;
import com.zjb.qj.R;
import com.zjb.qj.presenter.BasePresenter;
import com.zjb.qj.view.base.BaseActivity;
import com.zjb.qj.view.widget.flow.TagBaseAdapter;
import com.zjb.qj.view.widget.flow.TagCloudBean;
import com.zjb.qj.view.widget.flow.TagCloudLayout;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.OnClick;
/**
* 筛选
*/
public class ScreenActivity extends BaseActivity {
@BindView(R.id.screen_flow_xl)
TagCloudLayout screenFlowXl;
@BindView(R.id.screen_flow_jy)
TagCloudLayout screenFlowJy;
@BindView(R.id.screen_flow_xs)
TagCloudLayout screenFlowXs;
private TagBaseAdapter mAdapterxl;
private List<TagCloudBean> mListxl = new ArrayList<>();
private TagBaseAdapter mAdapterjy;
private List<TagCloudBean> mListjy = new ArrayList<>();
private TagBaseAdapter mAdapterxs;
private List<TagCloudBean> mListxs = new ArrayList<>();
String[] xl = {"全部", "中专及以下", "高中", "大专", "本科", "硕士", "博士"};
String[] jy = {"全部", "应届生", "1年内", "1-3年", "3-5年", "5-10年", "10年以上"};
String[] xs = {"全部", "3k以下", "3k-5k", "5k-10k", "10k-20k", "20k-50k", "50k以上"};
@Override
protected int getLayoutResource() {
return R.layout.activity_screen;
}
@Override
protected BasePresenter[] createPresenter() {
return new BasePresenter[0];
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initview();
}
@OnClick({R.id.screen_reset_tv, R.id.screen_confirm_tv})
public void onViewClick(View v) {
switch (v.getId()) {
case R.id.screen_reset_tv:
//重置
createData(mListxl, xl);
mAdapterxl.notifyDataSetChanged();
createData(mListjy, jy);
mAdapterjy.notifyDataSetChanged();
createData(mListxs, xs);
mAdapterxs.notifyDataSetChanged();
break;
case R.id.screen_confirm_tv:
//确认
finish();
break;
}
}
private void initview() {
// 学历
mAdapterxl = new TagBaseAdapter(this, createData(mListxl, xl));
screenFlowXl.setAdapter(mAdapterxl);
screenFlowXl.setItemClickListener(position -> {
changeState(mListxl, position);
mAdapterxl.notifyDataSetChanged();
});
// 经验
mAdapterjy = new TagBaseAdapter(this, createData(mListjy, jy));
screenFlowJy.setAdapter(mAdapterjy);
screenFlowJy.setItemClickListener(position -> {
changeState(mListjy, position);
mAdapterjy.notifyDataSetChanged();
});
// 薪资
mAdapterxs = new TagBaseAdapter(this, createData(mListxs, xs));
screenFlowXs.setAdapter(mAdapterxs);
screenFlowXs.setItemClickListener(position -> {
changeState(mListxs, position);
mAdapterxs.notifyDataSetChanged();
});
}
// 创建默认数据
private List<TagCloudBean> createData(List<TagCloudBean> list, String[] array) {
list.clear();
for (int i = 0; i < array.length; i++) {
TagCloudBean bean = new TagCloudBean();
bean.setName(array[i]);
if (i == 0) {
bean.setState(true);
} else {
bean.setState(false);
}
list.add(bean);
}
return list;
}
// 选择状态改变
private void changeState(List<TagCloudBean> list, int position) {
if (list.get(position).isState()) {
list.get(position).setState(false);
} else {
if (position == 0) {
for (int i = 0; i < list.size(); i++) {
list.get(i).setState(false);
}
list.get(0).setState(true);
} else {
list.get(0).setState(false);
list.get(position).setState(true);
}
}
}
}
package com.zjb.qj.view.widget.flow;
import android.content.Context;
import android.database.DataSetObserver;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
/**
* Created by zph on 2018/6/12.
*/
public class TagCloudLayout extends ViewGroup {
private int mLineSpacing;
private int mTagSpacing;
private BaseAdapter mAdapter;
private TagItemClickListener mListener;
private DataChangeObserver mObserver;
/**
*
*/
public TagCloudLayout(Context context) {
super(context);
init(context, null, 0);
}
/**
* @param context
* @param attrs
*/
public TagCloudLayout(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs, 0);
}
/**
* @param context
* @param attrs
* @param defStyle
*/
public TagCloudLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context, attrs, defStyle);
}
/**
* @param context
* @param attrs
* @param defStyle
*/
private void init(Context context, AttributeSet attrs, int defStyle) {
TagCloudConfiguration config = new TagCloudConfiguration(context, attrs);
mLineSpacing = config.getLineSpacing();
mTagSpacing = config.getTagSpacing();
}
private void drawLayout() {
if (mAdapter == null || mAdapter.getCount() == 0) {
return;
}
this.removeAllViews();
for (int i = 0; i < mAdapter.getCount(); i++) {
View view = mAdapter.getView(i,null,null);
final int position = i;
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mListener != null) {
mListener.itemClick(position);
}
}
});
this.addView(view);
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int wantHeight = 0;
int wantWidth = resolveSize(0, widthMeasureSpec);
int paddingLeft = getPaddingLeft();
int paddingRight = getPaddingRight();
int paddingTop = getPaddingTop();
int paddingBottom = getPaddingBottom();
int childLeft = paddingLeft;
int childTop = paddingTop;
int lineHeight = 0;
//TODO 固定列的数量所需要的代码
for (int i = 0; i < getChildCount(); i++) {
final View childView = getChildAt(i);
LayoutParams params = childView.getLayoutParams();
childView.measure(
getChildMeasureSpec(widthMeasureSpec, paddingLeft + paddingRight, params.width),
getChildMeasureSpec(heightMeasureSpec, paddingTop + paddingBottom, params.height)
);
int childHeight = childView.getMeasuredHeight();
int childWidth = childView.getMeasuredWidth();
lineHeight = Math.max(childHeight, lineHeight);
if (childLeft + childWidth + paddingRight > wantWidth) {
childLeft = paddingLeft;
childTop += mLineSpacing + childHeight;
lineHeight = childHeight;
}
childLeft += childWidth + mTagSpacing;
}
wantHeight += childTop + lineHeight + paddingBottom;
setMeasuredDimension(wantWidth, resolveSize(wantHeight, heightMeasureSpec));
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
//TODO 固定列的数量所需要的代码
int width = r - l;
int paddingLeft = getPaddingLeft();
int paddingTop = getPaddingTop();
int paddingRight = getPaddingRight();
int childLeft = paddingLeft;
int childTop = paddingTop;
int lineHeight = 0;
for (int i = 0; i < getChildCount(); i++) {
final View childView = getChildAt(i);
if (childView.getVisibility() == View.GONE) {
continue;
}
int childWidth = childView.getMeasuredWidth();
int childHeight = childView.getMeasuredHeight();
lineHeight = Math.max(childHeight, lineHeight);
if (childLeft + childWidth + paddingRight > width) {
childLeft = paddingLeft;
childTop += mLineSpacing + lineHeight;
lineHeight = childHeight;
}
childView.layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight);
childLeft += childWidth + mTagSpacing;
}
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
@Override
public LayoutParams generateLayoutParams(AttributeSet attrs) {
return new LayoutParams(this.getContext(), attrs);
}
public void setAdapter(BaseAdapter adapter){
if (mAdapter == null){
mAdapter = adapter;
if (mObserver == null){
mObserver = new DataChangeObserver();
mAdapter.registerDataSetObserver(mObserver);
}
drawLayout();
}
}
public void setItemClickListener(TagItemClickListener mListener) {
this.mListener = mListener;
}
public interface TagItemClickListener {
void itemClick(int position);
}
class DataChangeObserver extends DataSetObserver {
@Override
public void onChanged() {
TagCloudLayout.this.drawLayout();
}
@Override
public void onInvalidated() {
super.onInvalidated();
}
}
}
package com.zjb.qj.view.widget.flow;
import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import com.zjb.qj.R;
/**
* Created by zph on 2018/6/12.
*/
public class TagCloudConfiguration {
private static final int DEFAULT_LINE_SPACING = 5;
private static final int DEFAULT_TAG_SPACING = 10;
private static final int DEFAULT_FIXED_COLUMN_SIZE = 3; //默认列数
private int lineSpacing;
private int tagSpacing;
private int columnSize;
private boolean isFixed;
public TagCloudConfiguration(Context context, AttributeSet attrs){
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TagCloudLayout);
try {
lineSpacing = a.getDimensionPixelSize(R.styleable.TagCloudLayout_lineSpacing, DEFAULT_LINE_SPACING);
tagSpacing = a.getDimensionPixelSize(R.styleable.TagCloudLayout_tagSpacing, DEFAULT_TAG_SPACING);
columnSize = a.getInteger(R.styleable.TagCloudLayout_columnSize, DEFAULT_FIXED_COLUMN_SIZE);
isFixed = a.getBoolean(R.styleable.TagCloudLayout_isFixed,false);
} finally {
a.recycle();
}
}
public int getLineSpacing() {
return lineSpacing;
}
public void setLineSpacing(int lineSpacing) {
this.lineSpacing = lineSpacing;
}
public int getTagSpacing() {
return tagSpacing;
}
public void setTagSpacing(int tagSpacing) {
this.tagSpacing = tagSpacing;
}
public int getColumnSize() {
return columnSize;
}
public void setColumnSize(int columnSize) {
this.columnSize = columnSize;
}
public boolean isFixed() {
return isFixed;
}
public void setIsFixed(boolean isFixed) {
this.isFixed = isFixed;
}
}
package com.zjb.qj.view.widget.flow;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.zjb.qj.R;
import java.util.List;
/**
* Created by zph on 2018/6/12.
*/
public class TagBaseAdapter extends BaseAdapter {
private Context mContext;
private List<TagCloudBean> mList;
public TagBaseAdapter(Context context, List<TagCloudBean> list) {
mContext = context;
mList = list;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public TagCloudBean getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.item_flow, null);
holder = new ViewHolder();
holder.tagBtn = (TextView) convertView.findViewById(R.id.item_flow_tv);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
String text = getItem(position).getName();
holder.tagBtn.setText(text);
Boolean state = getItem(position).isState();
if (state) {
holder.tagBtn.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.bg_flow_normal));
holder.tagBtn.setTextColor(mContext.getResources().getColor(R.color.white));
} else {
holder.tagBtn.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.bg_flow));
holder.tagBtn.setTextColor(mContext.getResources().getColor(R.color.flow_color));
}
return convertView;
}
static class ViewHolder {
TextView tagBtn;
}
}
package com.zjb.qj.view.widget.flow;
/**
* Created by zph on 2018/6/13.
*/
public class TagCloudBean {
private String name;//标签名
private boolean state;//标签状态 是否选中
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isState() {
return state;
}
public void setState(boolean state) {
this.state = state;
}
}
<!--流式布局-->
<declare-styleable name="TagCloudLayout">
<attr name="lineSpacing" format="dimension" />
<attr name="tagSpacing" format="dimension" />
<!-- 是否是固定布局 -->
<attr name="isFixed" format="boolean" />
<attr name="columnSize" format="integer" />
</declare-styleable>