package com.likebamboo.osa.android.ui.view; import android.content.Context; import android.graphics.Point; import android.os.Build; import android.util.AttributeSet; import android.view.Display; import android.view.View; import android.view.WindowManager; import android.view.animation.AccelerateInterpolator; import android.view.animation.Interpolator; import android.widget.FrameLayout; import android.widget.TextView; import com.likebamboo.osa.android.R; import com.likebamboo.osa.android.ui.view.fab.FloatingView; import com.nineoldandroids.animation.ObjectAnimator; import com.nineoldandroids.view.ViewHelper; import butterknife.ButterKnife; import butterknife.InjectView; /** * listView底部过滤器布局 * <p/> * Created by likebamboo on 2015/6/15. */ public class FilterFooter extends FrameLayout implements FloatingView { /** * 加速器 */ private Interpolator mInterpolator = new AccelerateInterpolator(); /** * 是否隐藏 */ private boolean mHidden = false; /** * 隐藏时候的Y值 */ private float mYHidden = -1; /** * 显示时候的Y值 */ private float mYDisplayed = -1; @InjectView(R.id.filter_category_tv) TextView mCategoryTv = null; @InjectView(R.id.filter_sort_tv) TextView mSortTv = null; /** * 点击事件回调 */ private IOnFilterClickListener mFilterClickListener = null; public FilterFooter(Context context) { this(context, null); } public FilterFooter(Context context, AttributeSet attrs) { this(context, attrs, 0); } public FilterFooter(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); WindowManager mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = mWindowManager.getDefaultDisplay(); Point size = new Point(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { display.getSize(size); mYHidden = size.y; } else { mYHidden = display.getHeight(); } } @Override protected void onFinishInflate() { super.onFinishInflate(); if (isInEditMode()) { return; } ButterKnife.inject(this); mCategoryTv.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { if (mFilterClickListener == null) { return; } mFilterClickListener.onCategoryClick(); } }); mSortTv.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { if (mFilterClickListener == null) { return; } mFilterClickListener.onSortClick(); } }); } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { // Perform the default behavior super.onLayout(changed, left, top, right, bottom); // Store the FAB button's displayed Y position if we are not already aware of it if (mYDisplayed == -1) { mYDisplayed = ViewHelper.getY(this); } } @Override public void hide() { hide(true); } @Override public void show() { hide(false); } /** * 设置点击事件回调 * * @param l */ public void setFilterClickListener(IOnFilterClickListener l) { this.mFilterClickListener = l; } private void hide(boolean hide) { // If the hidden state is being updated if (mHidden != hide) { // Store the new hidden state mHidden = hide; // Animate the FAB to it's new Y position ObjectAnimator animator = ObjectAnimator.ofFloat(this, "y", mHidden ? mYHidden : mYDisplayed).setDuration(500); animator.setInterpolator(mInterpolator); animator.start(); } } /** * 点击事件回调 */ public interface IOnFilterClickListener { /** * 点击排序 */ void onSortClick(); /** * 点击分类 */ void onCategoryClick(); } }