package com.sunfusheng.StickyHeaderListView.view;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import com.sunfusheng.StickyHeaderListView.R;
import com.sunfusheng.StickyHeaderListView.adapter.FilterLeftAdapter;
import com.sunfusheng.StickyHeaderListView.adapter.FilterOneAdapter;
import com.sunfusheng.StickyHeaderListView.adapter.FilterRightAdapter;
import com.sunfusheng.StickyHeaderListView.model.FilterData;
import com.sunfusheng.StickyHeaderListView.model.FilterEntity;
import com.sunfusheng.StickyHeaderListView.model.FilterTwoEntity;
import butterknife.Bind;
import butterknife.ButterKnife;
/**
* Created by sunfusheng on 16/4/20.
*/
public class FilterView extends LinearLayout implements View.OnClickListener {
@Bind(R.id.tv_category)
TextView tvCategory;
@Bind(R.id.iv_category_arrow)
ImageView ivCategoryArrow;
@Bind(R.id.tv_sort)
TextView tvSort;
@Bind(R.id.iv_sort_arrow)
ImageView ivSortArrow;
@Bind(R.id.tv_filter)
TextView tvFilter;
@Bind(R.id.iv_filter_arrow)
ImageView ivFilterArrow;
@Bind(R.id.ll_category)
LinearLayout llCategory;
@Bind(R.id.ll_sort)
LinearLayout llSort;
@Bind(R.id.ll_filter)
LinearLayout llFilter;
@Bind(R.id.lv_left)
ListView lvLeft;
@Bind(R.id.lv_right)
ListView lvRight;
@Bind(R.id.ll_head_layout)
LinearLayout llHeadLayout;
@Bind(R.id.ll_content_list_view)
LinearLayout llContentListView;
@Bind(R.id.view_mask_bg)
View viewMaskBg;
private Context mContext;
private Activity mActivity;
private boolean isStickyTop = false; // 是否吸附在顶部
private boolean isShowing = false;
private int filterPosition = -1;
private int panelHeight;
private FilterData filterData;
private FilterTwoEntity selectedCategoryEntity; // 被选择的分类项
private FilterEntity selectedSortEntity; // 被选择的排序项
private FilterEntity selectedFilterEntity; // 被选择的筛选项
private FilterLeftAdapter leftAdapter;
private FilterRightAdapter rightAdapter;
private FilterOneAdapter sortAdapter;
private FilterOneAdapter filterAdapter;
public FilterView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public FilterView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
private void init(Context context) {
this.mContext = context;
View view = LayoutInflater.from(context).inflate(R.layout.view_filter_layout, this);
ButterKnife.bind(this, view);
initData();
initView();
initListener();
}
private void initData() {
}
private void initView() {
viewMaskBg.setVisibility(GONE);
llContentListView.setVisibility(GONE);
}
private void initListener() {
llCategory.setOnClickListener(this);
llSort.setOnClickListener(this);
llFilter.setOnClickListener(this);
viewMaskBg.setOnClickListener(this);
llContentListView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ll_category:
filterPosition = 0;
if (onFilterClickListener != null) {
onFilterClickListener.onFilterClick(filterPosition);
}
break;
case R.id.ll_sort:
filterPosition = 1;
if (onFilterClickListener != null) {
onFilterClickListener.onFilterClick(filterPosition);
}
break;
case R.id.ll_filter:
filterPosition = 2;
if (onFilterClickListener != null) {
onFilterClickListener.onFilterClick(filterPosition);
}
break;
case R.id.view_mask_bg:
hide();
break;
}
}
// 复位筛选的显示状态
public void resetFilterStatus() {
tvCategory.setTextColor(mContext.getResources().getColor(R.color.font_black_2));
ivCategoryArrow.setImageResource(R.mipmap.home_down_arrow);
tvSort.setTextColor(mContext.getResources().getColor(R.color.font_black_2));
ivSortArrow.setImageResource(R.mipmap.home_down_arrow);
tvFilter.setTextColor(mContext.getResources().getColor(R.color.font_black_2));
ivFilterArrow.setImageResource(R.mipmap.home_down_arrow);
}
// 复位所有的状态
public void resetAllStatus() {
resetFilterStatus();
hide();
}
// 显示筛选布局
public void showFilterLayout(int position) {
resetFilterStatus();
switch (position) {
case 0:
setCategoryAdapter();
break;
case 1:
setSortAdapter();
break;
case 2:
setFilterAdapter();
break;
}
if (isShowing) return ;
show();
}
// 设置分类数据
private void setCategoryAdapter() {
tvCategory.setTextColor(mActivity.getResources().getColor(R.color.orange));
ivCategoryArrow.setImageResource(R.mipmap.home_up_arrow);
lvLeft.setVisibility(VISIBLE);
lvRight.setVisibility(VISIBLE);
if (selectedCategoryEntity == null) {
selectedCategoryEntity = filterData.getCategory().get(0);
}
// 左边列表视图
leftAdapter = new FilterLeftAdapter(mContext, filterData.getCategory());
lvLeft.setAdapter(leftAdapter);
leftAdapter.setSelectedEntity(selectedCategoryEntity);
lvLeft.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectedCategoryEntity = filterData.getCategory().get(position);
leftAdapter.setSelectedEntity(selectedCategoryEntity);
// 右边列表视图
rightAdapter = new FilterRightAdapter(mContext, selectedCategoryEntity.getList());
lvRight.setAdapter(rightAdapter);
lvRight.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectedCategoryEntity.setSelectedFilterEntity(selectedCategoryEntity.getList().get(position));
rightAdapter.setSelectedEntity(selectedCategoryEntity.getSelectedFilterEntity());
hide();
if (onItemCategoryClickListener != null) {
onItemCategoryClickListener.onItemCategoryClick(selectedCategoryEntity);
}
}
});
}
});
// 如果右边有选中的数据,设置
if (selectedCategoryEntity.getSelectedFilterEntity() != null) {
rightAdapter = new FilterRightAdapter(mContext, selectedCategoryEntity.getList());
} else {
rightAdapter = new FilterRightAdapter(mContext, filterData.getCategory().get(0).getList());
}
lvRight.setAdapter(rightAdapter);
lvRight.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectedCategoryEntity.setSelectedFilterEntity(selectedCategoryEntity.getList().get(position));
rightAdapter.setSelectedEntity(selectedCategoryEntity.getSelectedFilterEntity());
hide();
if (onItemCategoryClickListener != null) {
onItemCategoryClickListener.onItemCategoryClick(selectedCategoryEntity);
}
}
});
}
// 设置排序数据
private void setSortAdapter() {
tvSort.setTextColor(mActivity.getResources().getColor(R.color.orange));
ivSortArrow.setImageResource(R.mipmap.home_up_arrow);
lvLeft.setVisibility(GONE);
lvRight.setVisibility(VISIBLE);
sortAdapter = new FilterOneAdapter(mContext, filterData.getSorts());
lvRight.setAdapter(sortAdapter);
lvRight.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectedSortEntity = filterData.getSorts().get(position);
sortAdapter.setSelectedEntity(selectedSortEntity);
hide();
if (onItemSortClickListener != null) {
onItemSortClickListener.onItemSortClick(selectedSortEntity);
}
}
});
}
// 设置筛选数据
private void setFilterAdapter() {
tvFilter.setTextColor(mActivity.getResources().getColor(R.color.orange));
ivFilterArrow.setImageResource(R.mipmap.home_up_arrow);
lvLeft.setVisibility(GONE);
lvRight.setVisibility(VISIBLE);
filterAdapter = new FilterOneAdapter(mContext, filterData.getFilters());
lvRight.setAdapter(filterAdapter);
lvRight.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectedFilterEntity = filterData.getFilters().get(position);
filterAdapter.setSelectedEntity(selectedFilterEntity);
hide();
if (onItemFilterClickListener != null) {
onItemFilterClickListener.onItemFilterClick(selectedFilterEntity);
}
}
});
}
// 动画显示
private void show() {
isShowing = true;
viewMaskBg.setVisibility(VISIBLE);
llContentListView.setVisibility(VISIBLE);
llContentListView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
llContentListView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
panelHeight = llContentListView.getHeight();
ObjectAnimator.ofFloat(llContentListView, "translationY", -panelHeight, 0).setDuration(200).start();
}
});
}
// 隐藏动画
public void hide() {
isShowing = false;
resetFilterStatus();
viewMaskBg.setVisibility(View.GONE);
ObjectAnimator.ofFloat(llContentListView, "translationY", 0, -panelHeight).setDuration(200).start();
}
// 是否吸附在顶部
public void setStickyTop(boolean stickyTop) {
isStickyTop = stickyTop;
}
// 设置筛选数据
public void setFilterData(Activity activity, FilterData filterData) {
this.mActivity = activity;
this.filterData = filterData;
}
// 是否显示
public boolean isShowing() {
return isShowing;
}
// 筛选视图点击
private OnFilterClickListener onFilterClickListener;
public void setOnFilterClickListener(OnFilterClickListener onFilterClickListener) {
this.onFilterClickListener = onFilterClickListener;
}
public interface OnFilterClickListener {
void onFilterClick(int position);
}
// 分类Item点击
private OnItemCategoryClickListener onItemCategoryClickListener;
public void setOnItemCategoryClickListener(OnItemCategoryClickListener onItemCategoryClickListener) {
this.onItemCategoryClickListener = onItemCategoryClickListener;
}
public interface OnItemCategoryClickListener {
void onItemCategoryClick(FilterTwoEntity entity);
}
// 排序Item点击
private OnItemSortClickListener onItemSortClickListener;
public void setOnItemSortClickListener(OnItemSortClickListener onItemSortClickListener) {
this.onItemSortClickListener = onItemSortClickListener;
}
public interface OnItemSortClickListener {
void onItemSortClick(FilterEntity entity);
}
// 筛选Item点击
private OnItemFilterClickListener onItemFilterClickListener;
public void setOnItemFilterClickListener(OnItemFilterClickListener onItemFilterClickListener) {
this.onItemFilterClickListener = onItemFilterClickListener;
}
public interface OnItemFilterClickListener {
void onItemFilterClick(FilterEntity entity);
}
}