diff --git a/README.md b/README.md
index e1aa0bf..f649a12 100644
--- a/README.md
+++ b/README.md
@@ -1,63 +1,65 @@
## StickyHeaderListView
-StickyHeaderListView 是基于实际需求做出的灵活可定制的UI功能,具体实现功能如下:
-一、支持无限循环的广告位。
-二、高度可动态配置的Header2和Header3(使用GridView实现)。
-三、主要功能:分类、排序和筛选布局滑动到顶部后吸附、悬停。
-四、自定义FilterView筛选控件,支持动画显示与动画隐藏。
-五、支持标题栏背景颜色渐变、字体颜色渐变。
-六、数据不足一屏动态添加空数据占位。
-七、数据为空时,ListView加载暂无数据视图。
-八、思路清晰、界面优美,添加ripple点击效果。
-九、支持下拉刷新和上拉加载更多功能。
+StickyHeaderListView是基于实际需求做出的灵活可变的UI视图,具体实现了如下功能:
+一、支持下拉刷新和上拉加载更多功能。
+二、支持无限循环的广告位。
+三、使用GridView实现可动态配置的频道位、运营位。
+四、自定义FilterView实现筛选功能,同时支持动画显示与动画隐藏。
+五、支持FilterView滑动到顶部后吸附悬浮。
+六、支持标题栏背景颜色渐变和字体颜色渐变。
+七、实现了数据不足一屏动态添加空数据占位。
+八、数据为空时ListView多type加载暂无数据视图。
-### 动态效果图
+
-
+### 应用截图
-
+
-
+
-### 截图
+### 动态效果图
-
-
-  |
-  |
-
-
+
-
-
-  |
-  |
-
-
+
+
+
### [实现思路参考简书文章](http://www.jianshu.com/p/3bf26722c489)
-### [APK下载地址](http://fir.im/StickyListView)
+
+
+### 扫一扫[Fir.im](https://fir.im/StickyListView)二维码下载APK
-### 微信公众号
+
-
+
-### 关于我
+### 个人微信公众号
-个人邮箱:sfsheng0322@126.com
+
-[GitHub主页](https://github.com/sfsheng0322)
+
-[简书主页](http://www.jianshu.com/users/88509e7e2ed1/latest_articles)
+### 打点赏给作者加点油^_^
-[个人博客](http://sunfusheng.com/)
+
-[新浪微博](http://weibo.com/u/3852192525)
+
+### 关于我
+[GitHub: sunfusheng](https://github.com/sunfusheng)
+[个人邮箱: sfsheng0322@126.com](https://mail.126.com/)
+
+[个人博客: sunfusheng.com](http://sunfusheng.com/)
+
+[简书主页](http://www.jianshu.com/users/88509e7e2ed1/latest_articles)
+
+[新浪微博](http://weibo.com/u/3852192525)
diff --git a/app/build.gradle b/app/build.gradle
index f3edff9..e80585e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,34 +1,76 @@
apply plugin: 'com.android.application'
+apply plugin: 'com.jakewharton.butterknife'
-android {
- compileSdkVersion 23
- buildToolsVersion "23.0.2"
+Properties signingProperties = new Properties()
+signingProperties.load(new FileInputStream(file("../signings/signing.properties")))
+android {
+ compileSdkVersion gradle.compileSdkVersion
defaultConfig {
applicationId "com.sunfusheng.StickyHeaderListView"
- minSdkVersion 11
- targetSdkVersion 23
- versionCode 6
- versionName "1.5"
+ minSdkVersion gradle.minSdkVersion
+ targetSdkVersion gradle.targetSdkVersion
+ versionCode gradle.versionCode
+ versionName gradle.versionName
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ lintOptions {
+ quiet true
+ abortOnError false
+ ignoreWarnings true
+ }
+
+ signingConfigs {
+ release {
+ storeFile file(signingProperties['KEYSTORE_FILEPATH'])
+ storePassword signingProperties['STORE_PASSWORD']
+ keyAlias signingProperties['KEY_ALIAS']
+ keyPassword signingProperties['KEY_PASSWORD']
+ }
}
buildTypes {
release {
- minifyEnabled false
+ buildConfigField "boolean", "debugMode", "false"
+ signingConfig signingConfigs.release
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ applicationVariants.all {
+ variant -> generateApk(variant)
+ }
+ }
+
+ debug {
+ buildConfigField "boolean", "debugMode", "true"
+ signingConfig signingConfigs.release
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ applicationVariants.all {
+ variant -> generateApk(variant)
+ }
}
}
}
-dependencies {
- compile fileTree(dir: 'libs', include: ['*.jar'])
- compile 'com.android.support:appcompat-v7:23.3.0'
- compile 'com.android.support:design:23.3.0'
- compile 'com.android.support:cardview-v7:23.3.0'
+def generateApk(variant) {
+ if (variant.buildType.name == "release") {
+ variant.getPackageApplication().outputDirectory = new File(project.rootDir.absolutePath + "/app/outputs")
+ variant.getPackageApplication().outputScope.apkDatas.forEach { apkData ->
+ apkData.outputFileName = "SHLV.apk"
+ }
+ }
+}
- // ButterKnife
- compile 'com.jakewharton:butterknife:7.0.1'
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'com.android.support:appcompat-v7:' + gradle.supportLibraryVersion
+ implementation 'com.android.support:design:' + gradle.supportLibraryVersion
+ implementation 'com.jakewharton:butterknife:8.4.0'
+ annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
- // Glide
- compile 'com.github.bumptech.glide:glide:3.7.0'
+ implementation 'com.sunfusheng:FirUpdater:1.0.7'
+ implementation 'com.sunfusheng:glideimageview:1.2.0'
}
diff --git a/app/outputs/SHLV.apk b/app/outputs/SHLV.apk
new file mode 100644
index 0000000..5abe2c8
Binary files /dev/null and b/app/outputs/SHLV.apk differ
diff --git a/app/outputs/output.json b/app/outputs/output.json
new file mode 100644
index 0000000..6a0c09d
--- /dev/null
+++ b/app/outputs/output.json
@@ -0,0 +1 @@
+[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":9},"path":"SHLV.apk","properties":{"packageId":"com.sunfusheng.StickyHeaderListView","split":"","minSdkVersion":"14"}}]
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8d4845d..3852b45 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -21,7 +21,7 @@
android:theme="@style/AppTheme">
@@ -30,7 +30,7 @@
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/ui/AboutActivity.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/AboutActivity.java
similarity index 96%
rename from app/src/main/java/com/sunfusheng/StickyHeaderListView/ui/AboutActivity.java
rename to app/src/main/java/com/sunfusheng/StickyHeaderListView/AboutActivity.java
index b07217f..462e9ac 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/ui/AboutActivity.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/AboutActivity.java
@@ -1,4 +1,4 @@
-package com.sunfusheng.StickyHeaderListView.ui;
+package com.sunfusheng.StickyHeaderListView;
import android.content.Context;
import android.content.pm.PackageInfo;
@@ -17,9 +17,7 @@
import android.webkit.WebView;
import android.webkit.WebViewClient;
-import com.sunfusheng.StickyHeaderListView.R;
-
-import butterknife.Bind;
+import butterknife.BindView;
import butterknife.ButterKnife;
/**
@@ -27,9 +25,9 @@
*/
public class AboutActivity extends AppCompatActivity {
- @Bind(R.id.toolbar)
+ @BindView(R.id.toolbar)
Toolbar toolbar;
- @Bind(R.id.webView)
+ @BindView(R.id.webView)
WebView webView;
private WebSettings settings;
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/ui/MainActivity.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/MainActivity.java
similarity index 62%
rename from app/src/main/java/com/sunfusheng/StickyHeaderListView/ui/MainActivity.java
rename to app/src/main/java/com/sunfusheng/StickyHeaderListView/MainActivity.java
index c882ac4..d5fd45b 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/ui/MainActivity.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/MainActivity.java
@@ -1,11 +1,10 @@
-package com.sunfusheng.StickyHeaderListView.ui;
+package com.sunfusheng.StickyHeaderListView;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
-import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AbsListView;
@@ -13,7 +12,7 @@
import android.widget.RelativeLayout;
import android.widget.TextView;
-import com.sunfusheng.StickyHeaderListView.R;
+import com.sunfusheng.FirUpdater;
import com.sunfusheng.StickyHeaderListView.adapter.TravelingAdapter;
import com.sunfusheng.StickyHeaderListView.model.ChannelEntity;
import com.sunfusheng.StickyHeaderListView.model.FilterData;
@@ -24,85 +23,82 @@
import com.sunfusheng.StickyHeaderListView.util.ColorUtil;
import com.sunfusheng.StickyHeaderListView.util.DensityUtil;
import com.sunfusheng.StickyHeaderListView.util.ModelUtil;
+import com.sunfusheng.StickyHeaderListView.util.StatusBarUtil;
import com.sunfusheng.StickyHeaderListView.view.FilterView;
-import com.sunfusheng.StickyHeaderListView.view.HeaderAdViewView;
-import com.sunfusheng.StickyHeaderListView.view.HeaderChannelViewView;
-import com.sunfusheng.StickyHeaderListView.view.HeaderDividerViewView;
-import com.sunfusheng.StickyHeaderListView.view.HeaderFilterViewView;
-import com.sunfusheng.StickyHeaderListView.view.HeaderOperationViewView;
+import com.sunfusheng.StickyHeaderListView.view.HeaderBannerView;
+import com.sunfusheng.StickyHeaderListView.view.HeaderChannelView;
+import com.sunfusheng.StickyHeaderListView.view.HeaderDividerView;
+import com.sunfusheng.StickyHeaderListView.view.HeaderFilterView;
+import com.sunfusheng.StickyHeaderListView.view.HeaderOperationView;
import com.sunfusheng.StickyHeaderListView.view.SmoothListView.SmoothListView;
import java.util.ArrayList;
import java.util.List;
-import butterknife.Bind;
+import butterknife.BindView;
import butterknife.ButterKnife;
/**
* 作者:孙福生
- *
+ *
* 个人博客:sunfusheng.com
*/
public class MainActivity extends AppCompatActivity implements SmoothListView.ISmoothListViewListener {
- @Bind(R.id.listView)
+ @BindView(R.id.listView)
SmoothListView smoothListView;
- @Bind(R.id.fv_top_filter)
- FilterView fvTopFilter;
- @Bind(R.id.rl_bar)
+ @BindView(R.id.real_filterView)
+ FilterView realFilterView;
+ @BindView(R.id.rl_bar)
RelativeLayout rlBar;
- @Bind(R.id.tv_title)
+ @BindView(R.id.tv_title)
TextView tvTitle;
- @Bind(R.id.view_title_bg)
+ @BindView(R.id.view_title_bg)
View viewTitleBg;
- @Bind(R.id.view_action_more_bg)
+ @BindView(R.id.view_action_more_bg)
View viewActionMoreBg;
- @Bind(R.id.fl_action_more)
+ @BindView(R.id.fl_action_more)
FrameLayout flActionMore;
private Context mContext;
private Activity mActivity;
private int mScreenHeight; // 屏幕高度
- private List adList = new ArrayList<>(); // 广告数据
+ private List bannerList = new ArrayList<>(); // 广告数据
private List channelList = new ArrayList<>(); // 频道数据
private List operationList = new ArrayList<>(); // 运营数据
private List travelingList = new ArrayList<>(); // ListView数据
- private HeaderAdViewView listViewAdHeaderView; // 广告视图
- private HeaderChannelViewView headerChannelView; // 频道视图
- private HeaderOperationViewView headerOperationViewView; // 运营视图
- private HeaderDividerViewView headerDividerViewView; // 分割线占位图
- private HeaderFilterViewView headerFilterViewView; // 分类筛选视图
+ private HeaderBannerView headerBannerView; // 广告视图
+ private HeaderChannelView headerChannelView; // 频道视图
+ private HeaderOperationView headerOperationView; // 运营视图
+ private HeaderDividerView headerDividerView; // 分割线占位图
+ private HeaderFilterView headerFilterView; // 分类筛选视图
private FilterData filterData; // 筛选数据
- private TravelingAdapter mAdapter; // 主页数据
+ private TravelingAdapter mAdapter;
+
+ private int titleViewHeight = 65; // 标题栏的高度
+
+ private View itemHeaderBannerView; // 从ListView获取的广告子View
+ private int bannerViewHeight = 180; // 广告视图的高度
+ private int bannerViewTopMargin; // 广告视图距离顶部的距离
- private View itemHeaderAdView; // 从ListView获取的广告子View
private View itemHeaderFilterView; // 从ListView获取的筛选子View
+ private int filterViewPosition = 4; // 筛选视图的位置
+ private int filterViewTopMargin; // 筛选视图距离顶部的距离
private boolean isScrollIdle = true; // ListView是否在滑动
private boolean isStickyTop = false; // 是否吸附在顶部
private boolean isSmooth = false; // 没有吸附的前提下,是否在滑动
- private int titleViewHeight = 50; // 标题栏的高度
private int filterPosition = -1; // 点击FilterView的位置:分类(0)、排序(1)、筛选(2)
- private int adViewHeight = 180; // 广告视图的高度
- private int adViewTopSpace; // 广告视图距离顶部的距离
-
- private int filterViewPosition = 4; // 筛选视图的位置
- private int filterViewTopSpace; // 筛选视图距离顶部的距离
-
- private Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- }
- };
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
+ StatusBarUtil.setStatusBarTranslucent(this, true);
+
+ new FirUpdater(this, "3c57fb226edf7facf821501e4eba08d2", "571dd00b00fc74312e00001f").checkVersion();
initData();
initView();
@@ -119,45 +115,40 @@ private void initData() {
filterData.setCategory(ModelUtil.getCategoryData());
filterData.setSorts(ModelUtil.getSortData());
filterData.setFilters(ModelUtil.getFilterData());
-
// 广告数据
- adList = ModelUtil.getAdData();
-
+ bannerList = ModelUtil.getBannerData();
// 频道数据
channelList = ModelUtil.getChannelData();
-
// 运营数据
operationList = ModelUtil.getOperationData();
-
// ListView数据
travelingList = ModelUtil.getTravelingData();
}
private void initView() {
- fvTopFilter.setVisibility(View.INVISIBLE);
-
- // 设置筛选数据
- fvTopFilter.setFilterData(mActivity, filterData);
-
// 设置广告数据
- listViewAdHeaderView = new HeaderAdViewView(this);
- listViewAdHeaderView.fillView(adList, smoothListView);
+ headerBannerView = new HeaderBannerView(this);
+ headerBannerView.fillView(bannerList, smoothListView);
// 设置频道数据
- headerChannelView = new HeaderChannelViewView(this);
+ headerChannelView = new HeaderChannelView(this);
headerChannelView.fillView(channelList, smoothListView);
// 设置运营数据
- headerOperationViewView = new HeaderOperationViewView(this);
- headerOperationViewView.fillView(operationList, smoothListView);
+ headerOperationView = new HeaderOperationView(this);
+ headerOperationView.fillView(operationList, smoothListView);
// 设置分割线
- headerDividerViewView = new HeaderDividerViewView(this);
- headerDividerViewView.fillView("", smoothListView);
+ headerDividerView = new HeaderDividerView(this);
+ headerDividerView.fillView("", smoothListView);
- // 设置筛选数据
- headerFilterViewView = new HeaderFilterViewView(this);
- headerFilterViewView.fillView(new Object(), smoothListView);
+ // 设置假FilterView数据
+ headerFilterView = new HeaderFilterView(this);
+ headerFilterView.fillView(new Object(), smoothListView);
+
+ // 设置真FilterView数据
+ realFilterView.setFilterData(mActivity, filterData);
+ realFilterView.setVisibility(View.GONE);
// 设置ListView数据
mAdapter = new TravelingAdapter(this, travelingList);
@@ -176,7 +167,7 @@ public void onClick(View v) {
});
// (假的ListView头部展示的)筛选视图点击
- headerFilterViewView.setOnFilterClickListener(new HeaderFilterViewView.OnFilterClickListener() {
+ headerFilterView.getFilterView().setOnFilterClickListener(new FilterView.OnFilterClickListener() {
@Override
public void onFilterClick(int position) {
filterPosition = position;
@@ -186,29 +177,25 @@ public void onFilterClick(int position) {
});
// (真正的)筛选视图点击
- fvTopFilter.setOnFilterClickListener(new FilterView.OnFilterClickListener() {
+ realFilterView.setOnFilterClickListener(new FilterView.OnFilterClickListener() {
@Override
public void onFilterClick(int position) {
- if (isStickyTop) {
- filterPosition = position;
- fvTopFilter.showFilterLayout(position);
- if (titleViewHeight - 3 > filterViewTopSpace || filterViewTopSpace > titleViewHeight + 3) {
- smoothListView.smoothScrollToPositionFromTop(filterViewPosition, DensityUtil.dip2px(mContext, titleViewHeight));
- }
- }
+ filterPosition = position;
+ realFilterView.show(position);
+ smoothListView.smoothScrollToPositionFromTop(filterViewPosition, DensityUtil.dip2px(mContext, titleViewHeight));
}
});
// 分类Item点击
- fvTopFilter.setOnItemCategoryClickListener(new FilterView.OnItemCategoryClickListener() {
+ realFilterView.setOnItemCategoryClickListener(new FilterView.OnItemCategoryClickListener() {
@Override
- public void onItemCategoryClick(FilterTwoEntity entity) {
- fillAdapter(ModelUtil.getCategoryTravelingData(entity));
+ public void onItemCategoryClick(FilterTwoEntity leftEntity, FilterEntity rightEntity) {
+ fillAdapter(ModelUtil.getCategoryTravelingData(leftEntity, rightEntity));
}
});
// 排序Item点击
- fvTopFilter.setOnItemSortClickListener(new FilterView.OnItemSortClickListener() {
+ realFilterView.setOnItemSortClickListener(new FilterView.OnItemSortClickListener() {
@Override
public void onItemSortClick(FilterEntity entity) {
fillAdapter(ModelUtil.getSortTravelingData(entity));
@@ -216,7 +203,7 @@ public void onItemSortClick(FilterEntity entity) {
});
// 筛选Item点击
- fvTopFilter.setOnItemFilterClickListener(new FilterView.OnItemFilterClickListener() {
+ realFilterView.setOnItemFilterClickListener(new FilterView.OnItemFilterClickListener() {
@Override
public void onItemFilterClick(FilterEntity entity) {
fillAdapter(ModelUtil.getFilterTravelingData(entity));
@@ -228,7 +215,8 @@ public void onItemFilterClick(FilterEntity entity) {
smoothListView.setSmoothListViewListener(this);
smoothListView.setOnScrollListener(new SmoothListView.OnSmoothScrollListener() {
@Override
- public void onSmoothScrolling(View view) {}
+ public void onSmoothScrolling(View view) {
+ }
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
@@ -237,15 +225,15 @@ public void onScrollStateChanged(AbsListView view, int scrollState) {
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- if (isScrollIdle && adViewTopSpace < 0) return;
+ if (isScrollIdle && bannerViewTopMargin < 0) return;
// 获取广告头部View、自身的高度、距离顶部的高度
- if (itemHeaderAdView == null) {
- itemHeaderAdView = smoothListView.getChildAt(1-firstVisibleItem);
+ if (itemHeaderBannerView == null) {
+ itemHeaderBannerView = smoothListView.getChildAt(1);
}
- if (itemHeaderAdView != null) {
- adViewTopSpace = DensityUtil.px2dip(mContext, itemHeaderAdView.getTop());
- adViewHeight = DensityUtil.px2dip(mContext, itemHeaderAdView.getHeight());
+ if (itemHeaderBannerView != null) {
+ bannerViewTopMargin = DensityUtil.px2dip(mContext, itemHeaderBannerView.getTop());
+ bannerViewHeight = DensityUtil.px2dip(mContext, itemHeaderBannerView.getHeight());
}
// 获取筛选View、距离顶部的高度
@@ -253,30 +241,23 @@ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCoun
itemHeaderFilterView = smoothListView.getChildAt(filterViewPosition - firstVisibleItem);
}
if (itemHeaderFilterView != null) {
- filterViewTopSpace = DensityUtil.px2dip(mContext, itemHeaderFilterView.getTop());
+ filterViewTopMargin = DensityUtil.px2dip(mContext, itemHeaderFilterView.getTop());
}
// 处理筛选是否吸附在顶部
- if (filterViewTopSpace > titleViewHeight) {
- isStickyTop = false; // 没有吸附在顶部
- fvTopFilter.setVisibility(View.INVISIBLE);
- } else {
+ if (filterViewTopMargin <= titleViewHeight || firstVisibleItem > filterViewPosition) {
isStickyTop = true; // 吸附在顶部
- fvTopFilter.setVisibility(View.VISIBLE);
- }
-
- if (firstVisibleItem > filterViewPosition) {
- isStickyTop = true;
- fvTopFilter.setVisibility(View.VISIBLE);
+ realFilterView.setVisibility(View.VISIBLE);
+ } else {
+ isStickyTop = false; // 没有吸附在顶部
+ realFilterView.setVisibility(View.GONE);
}
if (isSmooth && isStickyTop) {
isSmooth = false;
- fvTopFilter.showFilterLayout(filterPosition);
+ realFilterView.show(filterPosition);
}
- fvTopFilter.setStickyTop(isStickyTop);
-
// 处理标题栏颜色渐变
handleTitleBarColorEvaluate();
}
@@ -286,11 +267,9 @@ public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCoun
// 填充数据
private void fillAdapter(List list) {
if (list == null || list.size() == 0) {
- smoothListView.setLoadMoreEnable(false);
int height = mScreenHeight - DensityUtil.dip2px(mContext, 95); // 95 = 标题栏高度 + FilterView的高度
mAdapter.setData(ModelUtil.getNoDataEntity(height));
} else {
- smoothListView.setLoadMoreEnable(list.size() > TravelingAdapter.ONE_REQUEST_COUNT);
mAdapter.setData(list);
}
}
@@ -298,15 +277,15 @@ private void fillAdapter(List list) {
// 处理标题栏颜色渐变
private void handleTitleBarColorEvaluate() {
float fraction;
- if (adViewTopSpace > 0) {
- fraction = 1f - adViewTopSpace * 1f / 60;
+ if (bannerViewTopMargin > 0) {
+ fraction = 1f - bannerViewTopMargin * 1f / 60;
if (fraction < 0f) fraction = 0f;
rlBar.setAlpha(fraction);
- return ;
+ return;
}
- float space = Math.abs(adViewTopSpace) * 1f;
- fraction = space / (adViewHeight - titleViewHeight);
+ float space = Math.abs(bannerViewTopMargin) * 1f;
+ fraction = space / (bannerViewHeight - titleViewHeight);
if (fraction < 0f) fraction = 0f;
if (fraction > 1f) fraction = 1f;
rlBar.setAlpha(1f);
@@ -315,34 +294,38 @@ private void handleTitleBarColorEvaluate() {
isStickyTop = true;
viewTitleBg.setAlpha(0f);
viewActionMoreBg.setAlpha(0f);
- rlBar.setBackgroundColor(mContext.getResources().getColor(R.color.orange));
+ rlBar.setBackgroundColor(mContext.getResources().getColor(R.color.colorPrimary));
} else {
viewTitleBg.setAlpha(1f - fraction);
viewActionMoreBg.setAlpha(1f - fraction);
- rlBar.setBackgroundColor(ColorUtil.getNewColorByStartEndColor(mContext, fraction, R.color.transparent, R.color.orange));
+ rlBar.setBackgroundColor(ColorUtil.getNewColorByStartEndColor(mContext, fraction, R.color.transparent, R.color.colorPrimary));
}
}
@Override
- protected void onDestroy() {
- super.onDestroy();
- if (listViewAdHeaderView != null) {
- listViewAdHeaderView.stopADRotate();
- }
+ protected void onResume() {
+ super.onResume();
+ headerBannerView.enqueueBannerLoopMessage();
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+ headerBannerView.removeBannerLoopMessage();
}
@Override
public void onBackPressed() {
- if (!fvTopFilter.isShowing()) {
- super.onBackPressed();
+ if (realFilterView.isShowing()) {
+ realFilterView.resetAllStatus();
} else {
- fvTopFilter.resetAllStatus();
+ super.onBackPressed();
}
}
@Override
public void onRefresh() {
- mHandler.postDelayed(new Runnable() {
+ new Handler().postDelayed(new Runnable() {
@Override
public void run() {
smoothListView.stopRefresh();
@@ -353,7 +336,7 @@ public void run() {
@Override
public void onLoadMore() {
- mHandler.postDelayed(new Runnable() {
+ new Handler().postDelayed(new Runnable() {
@Override
public void run() {
smoothListView.stopLoadMore();
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/BaseListAdapter.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/BaseListAdapter.java
index 12de1f9..1c3e754 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/BaseListAdapter.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/BaseListAdapter.java
@@ -4,29 +4,23 @@
import android.view.LayoutInflater;
import android.widget.BaseAdapter;
-import com.sunfusheng.StickyHeaderListView.manager.ImageManager;
-
import java.util.ArrayList;
import java.util.List;
public abstract class BaseListAdapter extends BaseAdapter {
- private List mList = new ArrayList();
protected Context mContext;
+ private List mList = new ArrayList();
protected LayoutInflater mInflater;
- protected ImageManager mImageManager;
public BaseListAdapter(Context context) {
mContext = context;
mInflater = LayoutInflater.from(context);
- mImageManager = new ImageManager(context);
}
public BaseListAdapter(Context context, List list) {
this(context);
mList = list;
- mInflater = LayoutInflater.from(context);
- mImageManager = new ImageManager(context);
}
@Override
@@ -42,11 +36,9 @@ public List getData() {
return mList;
}
- public void addALL(List lists){
- if(lists==null||lists.size()==0){
- return ;
- }
- mList.addAll(lists);
+ public void addALL(List list){
+ if(list==null||list.size()==0) return;
+ mList.addAll(list);
}
public void add(E item){
mList.add(item);
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/FilterLeftAdapter.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/FilterLeftAdapter.java
index 46ff182..c4f5027 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/FilterLeftAdapter.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/FilterLeftAdapter.java
@@ -1,7 +1,6 @@
package com.sunfusheng.StickyHeaderListView.adapter;
import android.content.Context;
-import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
@@ -12,7 +11,7 @@
import java.util.List;
-import butterknife.Bind;
+import butterknife.BindView;
import butterknife.ButterKnife;
/**
@@ -20,8 +19,6 @@
*/
public class FilterLeftAdapter extends BaseListAdapter {
- private FilterTwoEntity selectedEntity;
-
public FilterLeftAdapter(Context context) {
super(context);
}
@@ -31,9 +28,8 @@ public FilterLeftAdapter(Context context, List list) {
}
public void setSelectedEntity(FilterTwoEntity filterEntity) {
- this.selectedEntity = filterEntity;
for (FilterTwoEntity entity : getData()) {
- entity.setSelected(entity.getType().equals(selectedEntity.getType()));
+ entity.setSelected(filterEntity != null && entity.getType().equals(filterEntity.getType()));
}
notifyDataSetChanged();
}
@@ -42,7 +38,7 @@ public void setSelectedEntity(FilterTwoEntity filterEntity) {
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
- convertView = LayoutInflater.from(mContext).inflate(R.layout.item_filter_left, null);
+ convertView = mInflater.inflate(R.layout.item_filter_left, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
@@ -53,7 +49,7 @@ public View getView(int position, View convertView, ViewGroup parent) {
holder.tvTitle.setText(entity.getType());
if (entity.isSelected()) {
- holder.tvTitle.setTextColor(mContext.getResources().getColor(R.color.orange));
+ holder.tvTitle.setTextColor(mContext.getResources().getColor(R.color.colorPrimary));
holder.llRootView.setBackgroundColor(mContext.getResources().getColor(R.color.white));
} else {
holder.tvTitle.setTextColor(mContext.getResources().getColor(R.color.font_black_2));
@@ -64,10 +60,10 @@ public View getView(int position, View convertView, ViewGroup parent) {
}
static class ViewHolder {
- @Bind(R.id.ll_root_view)
- LinearLayout llRootView;
- @Bind(R.id.tv_title)
+ @BindView(R.id.tv_title)
TextView tvTitle;
+ @BindView(R.id.ll_root_view)
+ LinearLayout llRootView;
ViewHolder(View view) {
ButterKnife.bind(this, view);
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/FilterOneAdapter.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/FilterOneAdapter.java
index 504abc3..54b631c 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/FilterOneAdapter.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/FilterOneAdapter.java
@@ -1,7 +1,6 @@
package com.sunfusheng.StickyHeaderListView.adapter;
import android.content.Context;
-import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
@@ -12,7 +11,7 @@
import java.util.List;
-import butterknife.Bind;
+import butterknife.BindView;
import butterknife.ButterKnife;
/**
@@ -20,8 +19,6 @@
*/
public class FilterOneAdapter extends BaseListAdapter {
- private FilterEntity selectedEntity;
-
public FilterOneAdapter(Context context) {
super(context);
}
@@ -31,9 +28,8 @@ public FilterOneAdapter(Context context, List list) {
}
public void setSelectedEntity(FilterEntity filterEntity) {
- this.selectedEntity = filterEntity;
for (FilterEntity entity : getData()) {
- entity.setSelected(entity.getKey().equals(selectedEntity.getKey()));
+ entity.setSelected(filterEntity != null && entity.getKey().equals(filterEntity.getKey()));
}
notifyDataSetChanged();
}
@@ -42,7 +38,7 @@ public void setSelectedEntity(FilterEntity filterEntity) {
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
- convertView = LayoutInflater.from(mContext).inflate(R.layout.item_filter_one, null);
+ convertView = mInflater.inflate(R.layout.item_filter_one, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
@@ -53,7 +49,7 @@ public View getView(int position, View convertView, ViewGroup parent) {
holder.tvTitle.setText(entity.getKey());
if (entity.isSelected()) {
- holder.tvTitle.setTextColor(mContext.getResources().getColor(R.color.orange));
+ holder.tvTitle.setTextColor(mContext.getResources().getColor(R.color.colorPrimary));
} else {
holder.tvTitle.setTextColor(mContext.getResources().getColor(R.color.font_black_3));
}
@@ -62,9 +58,9 @@ public View getView(int position, View convertView, ViewGroup parent) {
}
static class ViewHolder {
- @Bind(R.id.iv_image)
+ @BindView(R.id.iv_image)
ImageView ivImage;
- @Bind(R.id.tv_title)
+ @BindView(R.id.tv_title)
TextView tvTitle;
ViewHolder(View view) {
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/FilterRightAdapter.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/FilterRightAdapter.java
index 7ea8da5..197fa14 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/FilterRightAdapter.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/FilterRightAdapter.java
@@ -1,7 +1,6 @@
package com.sunfusheng.StickyHeaderListView.adapter;
import android.content.Context;
-import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
@@ -12,7 +11,7 @@
import java.util.List;
-import butterknife.Bind;
+import butterknife.BindView;
import butterknife.ButterKnife;
/**
@@ -20,20 +19,13 @@
*/
public class FilterRightAdapter extends BaseListAdapter {
- private FilterEntity selectedEntity;
-
- public FilterRightAdapter(Context context) {
- super(context);
- }
-
public FilterRightAdapter(Context context, List list) {
super(context, list);
}
public void setSelectedEntity(FilterEntity filterEntity) {
- this.selectedEntity = filterEntity;
for (FilterEntity entity : getData()) {
- entity.setSelected(entity.getKey().equals(selectedEntity.getKey()));
+ entity.setSelected(filterEntity != null && entity.getKey().equals(filterEntity.getKey()));
}
notifyDataSetChanged();
}
@@ -42,7 +34,7 @@ public void setSelectedEntity(FilterEntity filterEntity) {
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
- convertView = LayoutInflater.from(mContext).inflate(R.layout.item_filter_one, null);
+ convertView = mInflater.inflate(R.layout.item_filter_one, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
@@ -53,7 +45,7 @@ public View getView(int position, View convertView, ViewGroup parent) {
holder.tvTitle.setText(entity.getKey());
if (entity.isSelected()) {
- holder.tvTitle.setTextColor(mContext.getResources().getColor(R.color.orange));
+ holder.tvTitle.setTextColor(mContext.getResources().getColor(R.color.colorPrimary));
} else {
holder.tvTitle.setTextColor(mContext.getResources().getColor(R.color.font_black_3));
}
@@ -62,9 +54,9 @@ public View getView(int position, View convertView, ViewGroup parent) {
}
static class ViewHolder {
- @Bind(R.id.iv_image)
+ @BindView(R.id.iv_image)
ImageView ivImage;
- @Bind(R.id.tv_title)
+ @BindView(R.id.tv_title)
TextView tvTitle;
ViewHolder(View view) {
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderAdAdapter.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderBannerAdapter.java
similarity index 66%
rename from app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderAdAdapter.java
rename to app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderBannerAdapter.java
index ff139af..8089aa5 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderAdAdapter.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderBannerAdapter.java
@@ -1,6 +1,5 @@
package com.sunfusheng.StickyHeaderListView.adapter;
-import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
@@ -11,28 +10,22 @@
/**
* Created by sunfusheng on 16/4/20.
*/
-public class HeaderAdAdapter extends PagerAdapter {
+public class HeaderBannerAdapter extends PagerAdapter {
- private Context mContext;
private List ivList; // ImageView的集合
- private int count = 1; // 广告的数量
+ private int count; // 广告的数量
- public HeaderAdAdapter(Context context, List ivList) {
+ public HeaderBannerAdapter(List ivList) {
super();
- this.mContext = context;
this.ivList = ivList;
- if(ivList != null && ivList.size() > 0){
+ if(ivList != null){
count = ivList.size();
}
}
@Override
public int getCount() {
- if (count == 1) {
- return 1;
- } else {
- return Integer.MAX_VALUE;
- }
+ return Integer.MAX_VALUE;
}
@Override
@@ -47,7 +40,7 @@ public void destroyItem(ViewGroup container, int position, Object object) {
@Override
public Object instantiateItem(ViewGroup container, int position) {
int newPosition = position % count;
- // 先移除在添加,更新图片在container中的位置(把iv放至container末尾)
+ // 先移除再添加,更新图片在container中的位置(把iv放至container末尾)
ImageView iv = ivList.get(newPosition);
container.removeView(iv);
container.addView(iv);
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderChannelAdapter.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderChannelAdapter.java
index f566593..eb1d786 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderChannelAdapter.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderChannelAdapter.java
@@ -2,18 +2,17 @@
import android.content.Context;
import android.text.TextUtils;
-import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageView;
import android.widget.TextView;
import com.sunfusheng.StickyHeaderListView.R;
import com.sunfusheng.StickyHeaderListView.model.ChannelEntity;
+import com.sunfusheng.glideimageview.GlideImageView;
import java.util.List;
-import butterknife.Bind;
+import butterknife.BindView;
import butterknife.ButterKnife;
/**
@@ -29,7 +28,7 @@ public HeaderChannelAdapter(Context context, List list) {
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
- convertView = LayoutInflater.from(mContext).inflate(R.layout.item_channel, null);
+ convertView = mInflater.inflate(R.layout.item_channel, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
@@ -39,7 +38,8 @@ public View getView(int position, View convertView, ViewGroup parent) {
ChannelEntity entity = getItem(position);
holder.tvTitle.setText(entity.getTitle());
- mImageManager.loadCircleImage(entity.getImage_url(), holder.ivImage);
+ holder.givImage.loadImage(entity.getImage_url(), R.color.font_black_6);
+
if (TextUtils.isEmpty(entity.getTips())) {
holder.tvTips.setVisibility(View.INVISIBLE);
} else {
@@ -51,11 +51,11 @@ public View getView(int position, View convertView, ViewGroup parent) {
}
static class ViewHolder {
- @Bind(R.id.iv_image)
- ImageView ivImage;
- @Bind(R.id.tv_title)
+ @BindView(R.id.giv_image)
+ GlideImageView givImage;
+ @BindView(R.id.tv_title)
TextView tvTitle;
- @Bind(R.id.tv_tips)
+ @BindView(R.id.tv_tips)
TextView tvTips;
ViewHolder(View view) {
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderOperationAdapter.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderOperationAdapter.java
index 9346e6a..3bd5080 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderOperationAdapter.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderOperationAdapter.java
@@ -2,18 +2,17 @@
import android.content.Context;
import android.text.TextUtils;
-import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageView;
import android.widget.TextView;
import com.sunfusheng.StickyHeaderListView.R;
import com.sunfusheng.StickyHeaderListView.model.OperationEntity;
+import com.sunfusheng.glideimageview.GlideImageView;
import java.util.List;
-import butterknife.Bind;
+import butterknife.BindView;
import butterknife.ButterKnife;
/**
@@ -33,7 +32,7 @@ public HeaderOperationAdapter(Context context, List list) {
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
- convertView = LayoutInflater.from(mContext).inflate(R.layout.item_operation, null);
+ convertView = mInflater.inflate(R.layout.item_operation, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
@@ -43,7 +42,8 @@ public View getView(int position, View convertView, ViewGroup parent) {
OperationEntity entity = getItem(position);
holder.tvTitle.setText(entity.getTitle());
- mImageManager.loadUrlImage(entity.getImage_url(), holder.ivImage);
+ holder.givImage.loadImage(entity.getImage_url(), R.color.font_black_6);
+
if (TextUtils.isEmpty(entity.getSubtitle())) {
holder.tvSubtitle.setVisibility(View.INVISIBLE);
} else {
@@ -55,11 +55,11 @@ public View getView(int position, View convertView, ViewGroup parent) {
}
static class ViewHolder {
- @Bind(R.id.iv_image)
- ImageView ivImage;
- @Bind(R.id.tv_title)
+ @BindView(R.id.giv_image)
+ GlideImageView givImage;
+ @BindView(R.id.tv_title)
TextView tvTitle;
- @Bind(R.id.tv_subtitle)
+ @BindView(R.id.tv_subtitle)
TextView tvSubtitle;
ViewHolder(View view) {
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/TravelingAdapter.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/TravelingAdapter.java
index 56b156c..6cf7868 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/TravelingAdapter.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/TravelingAdapter.java
@@ -5,18 +5,19 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
-import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.sunfusheng.StickyHeaderListView.R;
import com.sunfusheng.StickyHeaderListView.model.TravelingEntity;
+import com.sunfusheng.StickyHeaderListView.util.ToastUtil;
+import com.sunfusheng.glideimageview.GlideImageView;
import java.util.ArrayList;
import java.util.List;
-import butterknife.Bind;
+import butterknife.BindView;
import butterknife.ButterKnife;
/**
@@ -26,7 +27,7 @@ public class TravelingAdapter extends BaseListAdapter {
private boolean isNoData;
private int mHeight;
- public static final int ONE_SCREEN_COUNT = 7; // 一屏能显示的个数,这个根据屏幕高度和各自的需求定
+ public static final int ONE_SCREEN_COUNT = 8; // 一屏能显示的个数,这个根据屏幕高度和各自的需求定
public static final int ONE_REQUEST_COUNT = 10; // 一次请求的个数
public TravelingAdapter(Context context) {
@@ -95,21 +96,29 @@ public View getView(int position, View convertView, ViewGroup parent) {
return convertView;
}
- holder.tvTitle.setText(entity.getFrom() + entity.getTitle() + entity.getType());
+ final String title = entity.getFrom() + entity.getTitle() + entity.getType();
+ holder.tvTitle.setText(title);
holder.tvRank.setText("排名:" + entity.getRank());
- mImageManager.loadUrlImage(entity.getImage_url(), holder.ivImage);
+ holder.givImage.loadImage(entity.getImage_url(), R.color.font_black_6);
+
+ convertView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ ToastUtil.show(mContext, title);
+ }
+ });
return convertView;
}
static class ViewHolder {
- @Bind(R.id.ll_root_view)
+ @BindView(R.id.ll_root_view)
LinearLayout llRootView;
- @Bind(R.id.iv_image)
- ImageView ivImage;
- @Bind(R.id.tv_title)
+ @BindView(R.id.giv_image)
+ GlideImageView givImage;
+ @BindView(R.id.tv_title)
TextView tvTitle;
- @Bind(R.id.tv_rank)
+ @BindView(R.id.tv_rank)
TextView tvRank;
ViewHolder(View view) {
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/manager/ImageManager.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/manager/ImageManager.java
deleted file mode 100644
index 4b31e3f..0000000
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/manager/ImageManager.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.sunfusheng.StickyHeaderListView.manager;
-
-import android.content.Context;
-import android.net.Uri;
-import android.widget.ImageView;
-
-import com.bumptech.glide.Glide;
-import com.sunfusheng.StickyHeaderListView.R;
-import com.sunfusheng.StickyHeaderListView.view.GlideCircleTransform;
-
-/**
- * Created by sunfusheng on 16/4/6.
- */
-public class ImageManager {
-
- private Context mContext;
- public static final String ANDROID_RESOURCE = "android.resource://";
- public static final String FOREWARD_SLASH = "/";
-
- public ImageManager(Context context) {
- this.mContext = context;
- }
-
- // 将资源ID转为Uri
- public Uri resourceIdToUri(int resourceId) {
- return Uri.parse(ANDROID_RESOURCE + mContext.getPackageName() + FOREWARD_SLASH + resourceId);
- }
-
- // 加载网络图片
- public void loadUrlImage(String url, ImageView imageView) {
- Glide.with(mContext)
- .load(url)
- .placeholder(R.color.font_black_6)
- .error(R.color.font_black_6)
- .crossFade()
- .into(imageView);
- }
-
- // 加载drawable图片
- public void loadResImage(int resId, ImageView imageView) {
- Glide.with(mContext)
- .load(resourceIdToUri(resId))
- .placeholder(R.color.font_black_6)
- .error(R.color.font_black_6)
- .crossFade()
- .into(imageView);
- }
-
- // 加载本地图片
- public void loadLocalImage(String path, ImageView imageView) {
- Glide.with(mContext)
- .load("file://" + path)
- .placeholder(R.color.font_black_6)
- .error(R.color.font_black_6)
- .crossFade()
- .into(imageView);
- }
-
- // 加载网络圆型图片
- public void loadCircleImage(String url, ImageView imageView) {
- Glide.with(mContext)
- .load(url)
- .placeholder(R.mipmap.ic_launcher)
- .error(R.mipmap.ic_launcher)
- .crossFade()
- .transform(new GlideCircleTransform(mContext))
- .into(imageView);
- }
-
- // 加载drawable圆型图片
- public void loadCircleResImage(int resId, ImageView imageView) {
- Glide.with(mContext)
- .load(resourceIdToUri(resId))
- .placeholder(R.color.font_black_6)
- .error(R.color.font_black_6)
- .crossFade()
- .transform(new GlideCircleTransform(mContext))
- .into(imageView);
- }
-
- // 加载本地圆型图片
- public void loadCircleLocalImage(String path, ImageView imageView) {
- Glide.with(mContext)
- .load("file://" + path)
- .placeholder(R.color.font_black_6)
- .error(R.color.font_black_6)
- .crossFade()
- .transform(new GlideCircleTransform(mContext))
- .into(imageView);
- }
-
-}
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/model/FilterTwoEntity.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/model/FilterTwoEntity.java
index cc08ed0..321fc4e 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/model/FilterTwoEntity.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/model/FilterTwoEntity.java
@@ -11,7 +11,6 @@ public class FilterTwoEntity implements Serializable {
private String type;
private List list;
private boolean isSelected;
- private FilterEntity selectedFilterEntity;
public FilterTwoEntity() {
}
@@ -29,14 +28,6 @@ public void setType(String type) {
this.type = type;
}
- public FilterEntity getSelectedFilterEntity() {
- return selectedFilterEntity;
- }
-
- public void setSelectedFilterEntity(FilterEntity selectedFilterEntity) {
- this.selectedFilterEntity = selectedFilterEntity;
- }
-
public boolean isSelected() {
return isSelected;
}
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/util/ColorUtil.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/util/ColorUtil.java
index f3a8194..1d8c9d1 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/util/ColorUtil.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/util/ColorUtil.java
@@ -7,13 +7,12 @@
*/
public class ColorUtil {
-
- // 成新的颜色值
+ // 合成新的颜色值
public static int getNewColorByStartEndColor(Context context, float fraction, int startValue, int endValue) {
return evaluate(fraction, context.getResources().getColor(startValue), context.getResources().getColor(endValue));
}
/**
- * 成新的颜色值
+ * 合成新的颜色值
* @param fraction 颜色取值的级别 (0.0f ~ 1.0f)
* @param startValue 开始显示的颜色
* @param endValue 结束显示的颜色
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/util/ModelUtil.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/util/ModelUtil.java
index 01a5f6b..54d4819 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/util/ModelUtil.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/util/ModelUtil.java
@@ -25,11 +25,12 @@ public class ModelUtil {
public static final String type_plant = "植物";
// 广告数据
- public static List getAdData() {
+ public static List getBannerData() {
List adList = new ArrayList<>();
- adList.add("http://img0.imgtn.bdimg.com/it/u=1270781761,1881354959&fm=21&gp=0.jpg");
- adList.add("http://img0.imgtn.bdimg.com/it/u=2138116966,3662367390&fm=21&gp=0.jpg");
- adList.add("http://img0.imgtn.bdimg.com/it/u=1296117362,655885600&fm=21&gp=0.jpg");
+ adList.add("http://img2.imgtn.bdimg.com/it/u=2850936076,2080165544&fm=206&gp=0.jpg");
+ adList.add("http://img3.imgtn.bdimg.com/it/u=524208507,12616758&fm=206&gp=0.jpg");
+ adList.add("http://img3.imgtn.bdimg.com/it/u=698582197,4250615262&fm=206&gp=0.jpg");
+ adList.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1519377816881&di=47c3c5f8f8e2010ac37d2267736a79a2&imgtype=0&src=http%3A%2F%2Fwww.fansimg.com%2Fportal%2F201406%2F10%2F105328z4xjovysf2kbkyfh.jpg.thumb.jpg");
return adList;
}
@@ -39,7 +40,7 @@ public static List getChannelData() {
channelList.add(new ChannelEntity("中国", "天安门", "http://img2.imgtn.bdimg.com/it/u=2850936076,2080165544&fm=206&gp=0.jpg"));
channelList.add(new ChannelEntity("美国", "白宫", "http://img3.imgtn.bdimg.com/it/u=524208507,12616758&fm=206&gp=0.jpg"));
channelList.add(new ChannelEntity("英国", "伦敦塔桥", "http://img3.imgtn.bdimg.com/it/u=698582197,4250615262&fm=206&gp=0.jpg"));
- channelList.add(new ChannelEntity("德国", "城堡", "http://img5.imgtn.bdimg.com/it/u=1467751238,3257336851&fm=11&gp=0.jpg"));
+ channelList.add(new ChannelEntity("德国", "城堡", "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1519377816881&di=47c3c5f8f8e2010ac37d2267736a79a2&imgtype=0&src=http%3A%2F%2Fwww.fansimg.com%2Fportal%2F201406%2F10%2F105328z4xjovysf2kbkyfh.jpg.thumb.jpg"));
channelList.add(new ChannelEntity("西班牙", "巴塞罗那", "http://img5.imgtn.bdimg.com/it/u=3191365283,111438732&fm=21&gp=0.jpg"));
channelList.add(new ChannelEntity("意大利", "比萨斜塔", "http://img5.imgtn.bdimg.com/it/u=482494496,1350922497&fm=206&gp=0.jpg"));
return channelList;
@@ -112,13 +113,12 @@ public static List getFilterData() {
}
// ListView分类数据
- public static List getCategoryTravelingData(FilterTwoEntity entity) {
+ public static List getCategoryTravelingData(FilterTwoEntity leftEntity, FilterEntity rightEntity) {
List list = getTravelingData();
List travelingList = new ArrayList<>();
int size = list.size();
for (int i=0; i= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+ window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+ window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
+ window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
+ | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
+ window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
+ window.setStatusBarColor(Color.TRANSPARENT);
+ }
+
+ if (isXiaomi()) {
+ setXiaomiStatusBar(window, isLightStatusBar);
+ } else if (isMeizu()) {
+ setMeizuStatusBar(window, isLightStatusBar);
+ }
+ }
+
+ // 是否是小米手机
+ public static boolean isXiaomi() {
+ return "Xiaomi".equals(Build.MANUFACTURER);
+ }
+
+ // 设置小米状态栏
+ public static void setXiaomiStatusBar(Window window, boolean isLightStatusBar) {
+ Class extends Window> clazz = window.getClass();
+ try {
+ Class> layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
+ Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
+ int darkModeFlag = field.getInt(layoutParams);
+ Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
+ extraFlagField.invoke(window, isLightStatusBar ? darkModeFlag : 0, darkModeFlag);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ // 是否是魅族手机
+ public static boolean isMeizu() {
+ try {
+ Method method = Build.class.getMethod("hasSmartBar");
+ return method != null;
+ } catch (NoSuchMethodException e) {
+ }
+ return false;
+ }
+
+ // 设置魅族状态栏
+ public static void setMeizuStatusBar(Window window, boolean isLightStatusBar) {
+ WindowManager.LayoutParams params = window.getAttributes();
+ try {
+ Field darkFlag = WindowManager.LayoutParams.class.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
+ Field meizuFlags = WindowManager.LayoutParams.class.getDeclaredField("meizuFlags");
+ darkFlag.setAccessible(true);
+ meizuFlags.setAccessible(true);
+ int bit = darkFlag.getInt(null);
+ int value = meizuFlags.getInt(params);
+ if (isLightStatusBar) {
+ value |= bit;
+ } else {
+ value &= ~bit;
+ }
+ meizuFlags.setInt(params, value);
+ window.setAttributes(params);
+ darkFlag.setAccessible(false);
+ meizuFlags.setAccessible(false);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/util/ToastUtil.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/util/ToastUtil.java
new file mode 100644
index 0000000..70fc745
--- /dev/null
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/util/ToastUtil.java
@@ -0,0 +1,30 @@
+package com.sunfusheng.StickyHeaderListView.util;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.widget.Toast;
+
+/**
+ * Created by sunfusheng on 15/8/7.
+ */
+public class ToastUtil {
+
+ private static Toast mToast;
+
+ public static void show(Context context, String message) {
+ if (context == null || TextUtils.isEmpty(message)) return;
+ int duration;
+ if (message.length() > 10) {
+ duration = Toast.LENGTH_LONG; //如果字符串比较长,那么显示的时间也长一些。
+ } else {
+ duration = Toast.LENGTH_SHORT;
+ }
+ if (mToast == null) {
+ mToast = Toast.makeText(context, message, duration);
+ } else {
+ mToast.setText(message);
+ mToast.setDuration(duration);
+ }
+ mToast.show();
+ }
+}
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderViewInterface.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/AbsHeaderView.java
similarity index 73%
rename from app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderViewInterface.java
rename to app/src/main/java/com/sunfusheng/StickyHeaderListView/view/AbsHeaderView.java
index 3f846ab..7af17d0 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderViewInterface.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/AbsHeaderView.java
@@ -6,15 +6,15 @@
import java.util.List;
-public abstract class HeaderViewInterface {
+public abstract class AbsHeaderView {
- protected Activity mContext;
+ protected Activity mActivity;
protected LayoutInflater mInflate;
protected T mEntity;
- public HeaderViewInterface(Activity context) {
- this.mContext = context;
- mInflate = LayoutInflater.from(context);
+ public AbsHeaderView(Activity activity) {
+ this.mActivity = activity;
+ mInflate = LayoutInflater.from(activity);
}
public boolean fillView(T t, ListView listView) {
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/FilterView.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/FilterView.java
index 0e49129..5d7c7d5 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/FilterView.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/FilterView.java
@@ -8,6 +8,8 @@
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver;
+import android.view.animation.Animation;
+import android.view.animation.RotateAnimation;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.LinearLayout;
@@ -22,7 +24,7 @@
import com.sunfusheng.StickyHeaderListView.model.FilterEntity;
import com.sunfusheng.StickyHeaderListView.model.FilterTwoEntity;
-import butterknife.Bind;
+import butterknife.BindView;
import butterknife.ButterKnife;
/**
@@ -30,52 +32,58 @@
*/
public class FilterView extends LinearLayout implements View.OnClickListener {
- @Bind(R.id.tv_category)
- TextView tvCategory;
- @Bind(R.id.iv_category_arrow)
+ @BindView(R.id.tv_category_title)
+ TextView tvCategoryTitle;
+ @BindView(R.id.iv_category_arrow)
ImageView ivCategoryArrow;
- @Bind(R.id.tv_sort)
- TextView tvSort;
- @Bind(R.id.iv_sort_arrow)
+ @BindView(R.id.tv_sort_title)
+ TextView tvSortTitle;
+ @BindView(R.id.iv_sort_arrow)
ImageView ivSortArrow;
- @Bind(R.id.tv_filter)
- TextView tvFilter;
- @Bind(R.id.iv_filter_arrow)
+ @BindView(R.id.tv_filter_title)
+ TextView tvFilterTitle;
+ @BindView(R.id.iv_filter_arrow)
ImageView ivFilterArrow;
- @Bind(R.id.ll_category)
+ @BindView(R.id.ll_category)
LinearLayout llCategory;
- @Bind(R.id.ll_sort)
+ @BindView(R.id.ll_sort)
LinearLayout llSort;
- @Bind(R.id.ll_filter)
+ @BindView(R.id.ll_filter)
LinearLayout llFilter;
- @Bind(R.id.lv_left)
+ @BindView(R.id.lv_left)
ListView lvLeft;
- @Bind(R.id.lv_right)
+ @BindView(R.id.lv_right)
ListView lvRight;
- @Bind(R.id.ll_head_layout)
+ @BindView(R.id.ll_head_layout)
LinearLayout llHeadLayout;
- @Bind(R.id.ll_content_list_view)
+ @BindView(R.id.ll_content_list_view)
LinearLayout llContentListView;
- @Bind(R.id.view_mask_bg)
+ @BindView(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 lastFilterPosition = -1;
+ public static final int POSITION_CATEGORY = 0; // 分类的位置
+ public static final int POSITION_SORT = 1; // 排序的位置
+ public static final int POSITION_FILTER = 2; // 筛选的位置
+
+ private boolean isShowing = false;
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;
+ private FilterTwoEntity leftSelectedCategoryEntity; // 被选择的分类项左侧数据
+ private FilterEntity rightSelectedCategoryEntity; // 被选择的分类项右侧数据
+ private FilterEntity selectedSortEntity; // 被选择的排序项
+ private FilterEntity selectedFilterEntity; // 被选择的筛选项
+
public FilterView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
@@ -91,15 +99,10 @@ private void init(Context 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);
@@ -143,175 +146,165 @@ public void onClick(View v) {
hide();
break;
}
-
}
// 复位筛选的显示状态
- public void resetFilterStatus() {
- tvCategory.setTextColor(mContext.getResources().getColor(R.color.font_black_2));
+ public void resetViewStatus() {
+ tvCategoryTitle.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));
+ tvSortTitle.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));
+ tvFilterTitle.setTextColor(mContext.getResources().getColor(R.color.font_black_2));
ivFilterArrow.setImageResource(R.mipmap.home_down_arrow);
}
// 复位所有的状态
public void resetAllStatus() {
- resetFilterStatus();
+ resetViewStatus();
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);
+ if (leftSelectedCategoryEntity == null) {
+ leftSelectedCategoryEntity = filterData.getCategory().get(0);
+ }
+ leftAdapter.setSelectedEntity(leftSelectedCategoryEntity);
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);
+ leftSelectedCategoryEntity = filterData.getCategory().get(position);
+ leftAdapter.setSelectedEntity(leftSelectedCategoryEntity);
// 右边列表视图
- rightAdapter = new FilterRightAdapter(mContext, selectedCategoryEntity.getList());
+ rightAdapter = new FilterRightAdapter(mContext, leftSelectedCategoryEntity.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);
- }
- }
- });
+ rightAdapter.setSelectedEntity(rightSelectedCategoryEntity);
}
});
- // 如果右边有选中的数据,设置
- if (selectedCategoryEntity.getSelectedFilterEntity() != null) {
- rightAdapter = new FilterRightAdapter(mContext, selectedCategoryEntity.getList());
- } else {
- rightAdapter = new FilterRightAdapter(mContext, filterData.getCategory().get(0).getList());
- }
+ // 右边列表视图
+ rightAdapter = new FilterRightAdapter(mContext, leftSelectedCategoryEntity.getList());
lvRight.setAdapter(rightAdapter);
+ rightAdapter.setSelectedEntity(rightSelectedCategoryEntity);
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();
+ rightSelectedCategoryEntity = leftSelectedCategoryEntity.getList().get(position);
+ rightAdapter.setSelectedEntity(rightSelectedCategoryEntity);
if (onItemCategoryClickListener != null) {
- onItemCategoryClickListener.onItemCategoryClick(selectedCategoryEntity);
+ onItemCategoryClickListener.onItemCategoryClick(leftSelectedCategoryEntity, rightSelectedCategoryEntity);
}
+ hide();
}
});
}
// 设置排序数据
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);
}
+ hide();
}
});
}
// 设置筛选数据
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);
}
+ hide();
}
});
}
// 动画显示
- private void show() {
+ public void show(int position) {
+ if (isShowing && lastFilterPosition == position) {
+ hide();
+ return;
+ } else if (!isShowing) {
+ 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();
+ }
+ });
+ }
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();
- }
- });
+ resetViewStatus();
+ rotateArrowUp(position);
+ rotateArrowDown(lastFilterPosition);
+ lastFilterPosition = position;
+
+ switch (position) {
+ case POSITION_CATEGORY:
+ tvCategoryTitle.setTextColor(mActivity.getResources().getColor(R.color.colorPrimary));
+ ivCategoryArrow.setImageResource(R.mipmap.home_down_arrow_red);
+ setCategoryAdapter();
+ break;
+ case POSITION_SORT:
+ tvSortTitle.setTextColor(mActivity.getResources().getColor(R.color.colorPrimary));
+ ivSortArrow.setImageResource(R.mipmap.home_down_arrow_red);
+ setSortAdapter();
+ break;
+ case POSITION_FILTER:
+ tvFilterTitle.setTextColor(mActivity.getResources().getColor(R.color.colorPrimary));
+ ivFilterArrow.setImageResource(R.mipmap.home_down_arrow_red);
+ setFilterAdapter();
+ break;
+ }
}
// 隐藏动画
public void hide() {
isShowing = false;
- resetFilterStatus();
+ resetViewStatus();
+ rotateArrowDown(filterPosition);
+ rotateArrowDown(lastFilterPosition);
+ filterPosition = -1;
+ lastFilterPosition = -1;
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;
@@ -323,6 +316,58 @@ public boolean isShowing() {
return isShowing;
}
+ public int getFilterPosition() {
+ return filterPosition;
+ }
+
+ // 旋转箭头向上
+ private void rotateArrowUp(int position) {
+ switch (position) {
+ case POSITION_CATEGORY:
+ rotateArrowUpAnimation(ivCategoryArrow);
+ break;
+ case POSITION_SORT:
+ rotateArrowUpAnimation(ivSortArrow);
+ break;
+ case POSITION_FILTER:
+ rotateArrowUpAnimation(ivFilterArrow);
+ break;
+ }
+ }
+
+ // 旋转箭头向下
+ private void rotateArrowDown(int position) {
+ switch (position) {
+ case POSITION_CATEGORY:
+ rotateArrowDownAnimation(ivCategoryArrow);
+ break;
+ case POSITION_SORT:
+ rotateArrowDownAnimation(ivSortArrow);
+ break;
+ case POSITION_FILTER:
+ rotateArrowDownAnimation(ivFilterArrow);
+ break;
+ }
+ }
+
+ // 旋转箭头向上
+ public static void rotateArrowUpAnimation(final ImageView iv) {
+ if (iv == null) return;
+ RotateAnimation animation = new RotateAnimation(0f, 180f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
+ animation.setDuration(200);
+ animation.setFillAfter(true);
+ iv.startAnimation(animation);
+ }
+
+ // 旋转箭头向下
+ public static void rotateArrowDownAnimation(final ImageView iv) {
+ if (iv == null) return;
+ RotateAnimation animation = new RotateAnimation(180f, 0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
+ animation.setDuration(200);
+ animation.setFillAfter(true);
+ iv.startAnimation(animation);
+ }
+
// 筛选视图点击
private OnFilterClickListener onFilterClickListener;
public void setOnFilterClickListener(OnFilterClickListener onFilterClickListener) {
@@ -338,7 +383,7 @@ public void setOnItemCategoryClickListener(OnItemCategoryClickListener onItemCat
this.onItemCategoryClickListener = onItemCategoryClickListener;
}
public interface OnItemCategoryClickListener {
- void onItemCategoryClick(FilterTwoEntity entity);
+ void onItemCategoryClick(FilterTwoEntity leftEntity, FilterEntity rightEntity);
}
// 排序Item点击
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/FixedSpeedScroller.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/FixedSpeedScroller.java
new file mode 100644
index 0000000..3e1f70b
--- /dev/null
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/FixedSpeedScroller.java
@@ -0,0 +1,36 @@
+package com.sunfusheng.StickyHeaderListView.view;
+
+import android.content.Context;
+import android.view.animation.Interpolator;
+import android.widget.Scroller;
+
+/**
+ * Created by sunfusheng on 16/8/18.
+ */
+public class FixedSpeedScroller extends Scroller {
+
+ private int mDuration = 1000;
+
+ public FixedSpeedScroller(Context context) {
+ super(context);
+ }
+
+ public FixedSpeedScroller(Context context, Interpolator interpolator) {
+ super(context, interpolator);
+ }
+
+ @Override
+ public void startScroll(int startX, int startY, int dx, int dy, int duration) {
+ super.startScroll(startX, startY, dx, dy, mDuration);
+ }
+
+ @Override
+ public void startScroll(int startX, int startY, int dx, int dy) {
+ super.startScroll(startX, startY, dx, dy, mDuration);
+ }
+
+ public void setDuration(int time) {
+ mDuration = time;
+ }
+
+}
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/GlideCircleTransform.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/GlideCircleTransform.java
deleted file mode 100644
index efd9e5f..0000000
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/GlideCircleTransform.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.sunfusheng.StickyHeaderListView.view;
-
-import android.content.Context;
-import android.graphics.Bitmap;
-import android.graphics.BitmapShader;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-
-import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
-import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
-
-/**
- * Created by sunfusheng on 16/4/6.
- */
-public class GlideCircleTransform extends BitmapTransformation {
-
- public GlideCircleTransform(Context context) {
- super(context);
- }
-
- @Override
- protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
- return circleCrop(pool, toTransform);
- }
-
- private static Bitmap circleCrop(BitmapPool pool, Bitmap source) {
- if (source == null) return null;
-
- int size = Math.min(source.getWidth(), source.getHeight());
- int x = (source.getWidth() - size) / 2;
- int y = (source.getHeight() - size) / 2;
-
- Bitmap squared = Bitmap.createBitmap(source, x, y, size, size);
-
- Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888);
- if (result == null) {
- result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
- }
-
- Canvas canvas = new Canvas(result);
- Paint paint = new Paint();
- paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
- paint.setAntiAlias(true);
- float r = size / 2f;
- canvas.drawCircle(r, r, r, paint);
- return result;
- }
-
- @Override
- public String getId() {
- return getClass().getName();
- }
-}
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/GlideRoundTransform.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/GlideRoundTransform.java
deleted file mode 100644
index f144841..0000000
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/GlideRoundTransform.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.sunfusheng.StickyHeaderListView.view;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapShader;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.RectF;
-
-import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool;
-import com.bumptech.glide.load.resource.bitmap.BitmapTransformation;
-
-/**
- * Created by sunfusheng on 16/4/6.
- */
-public class GlideRoundTransform extends BitmapTransformation {
-
- private static float radius = 0f;
-
- public GlideRoundTransform(Context context) {
- this(context, 4);
- }
-
- public GlideRoundTransform(Context context, int dp) {
- super(context);
- this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
- }
-
- @Override
- protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
- return roundCrop(pool, toTransform);
- }
-
- private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
- if (source == null) return null;
-
- Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
- if (result == null) {
- result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
- }
-
- Canvas canvas = new Canvas(result);
- Paint paint = new Paint();
- paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
- paint.setAntiAlias(true);
- RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
- canvas.drawRoundRect(rectF, radius, radius, paint);
- return result;
- }
-
- @Override
- public String getId() {
- return getClass().getName() + Math.round(radius);
- }
-}
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderAdViewView.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderAdViewView.java
deleted file mode 100644
index 9e473f7..0000000
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderAdViewView.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package com.sunfusheng.StickyHeaderListView.view;
-
-import android.app.Activity;
-import android.os.Handler;
-import android.os.Message;
-import android.os.SystemClock;
-import android.support.v4.view.ViewPager;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AbsListView;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.ListView;
-
-import com.sunfusheng.StickyHeaderListView.R;
-import com.sunfusheng.StickyHeaderListView.adapter.HeaderAdAdapter;
-import com.sunfusheng.StickyHeaderListView.manager.ImageManager;
-import com.sunfusheng.StickyHeaderListView.util.DensityUtil;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import butterknife.Bind;
-import butterknife.ButterKnife;
-
-public class HeaderAdViewView extends HeaderViewInterface> {
-
- @Bind(R.id.vp_ad)
- ViewPager vpAd;
- @Bind(R.id.ll_index_container)
- LinearLayout llIndexContainer;
-
- private static final int TYPE_CHANGE_AD = 0;
- private Thread mThread;
- private List ivList;
- private boolean isStopThread = false;
- private ImageManager mImageManager;
-
- private Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- if (msg.what == TYPE_CHANGE_AD) {
- vpAd.setCurrentItem(vpAd.getCurrentItem() + 1);
- }
- }
- };
-
- public HeaderAdViewView(Activity context) {
- super(context);
- ivList = new ArrayList<>();
- mImageManager = new ImageManager(context);
- }
-
- @Override
- protected void getView(List list, ListView listView) {
- View view = mInflate.inflate(R.layout.header_ad_layout, listView, false);
- ButterKnife.bind(this, view);
-
- dealWithTheView(list);
- listView.addHeaderView(view);
- }
-
- private void dealWithTheView(List list) {
- ivList.clear();
- int size = list.size();
- for (int i = 0; i < size; i++) {
- ivList.add(createImageView(list.get(i)));
- }
-
- HeaderAdAdapter photoAdapter = new HeaderAdAdapter(mContext, ivList);
- vpAd.setAdapter(photoAdapter);
-
- addIndicatorImageViews(size);
- setViewPagerChangeListener(size);
- startADRotate();
- }
-
- // 创建要显示的ImageView
- private ImageView createImageView(String url) {
- ImageView imageView = new ImageView(mContext);
- AbsListView.LayoutParams params = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
- imageView.setLayoutParams(params);
- imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
- mImageManager.loadUrlImage(url, imageView);
- return imageView;
- }
-
- // 添加指示图标
- private void addIndicatorImageViews(int size) {
- llIndexContainer.removeAllViews();
- for (int i = 0; i < size; i++) {
- ImageView iv = new ImageView(mContext);
- LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(DensityUtil.dip2px(mContext, 5), DensityUtil.dip2px(mContext, 5));
- if (i != 0) {
- lp.leftMargin = DensityUtil.dip2px(mContext, 7);
- }
- iv.setLayoutParams(lp);
- iv.setBackgroundResource(R.drawable.xml_round_orange_grey_sel);
- iv.setEnabled(false);
- if (i == 0) {
- iv.setEnabled(true);
- }
- llIndexContainer.addView(iv);
- }
- }
-
- // 为ViewPager设置监听器
- private void setViewPagerChangeListener(final int size) {
- vpAd.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
- @Override
- public void onPageSelected(int position) {
- if (ivList != null && ivList.size() > 0) {
- int newPosition = position % size;
- for (int i = 0; i < size; i++) {
- llIndexContainer.getChildAt(i).setEnabled(false);
- if (i == newPosition) {
- llIndexContainer.getChildAt(i).setEnabled(true);
- }
- }
- }
- }
-
- @Override
- public void onPageScrolled(int position, float arg1, int arg2) {
- }
-
- @Override
- public void onPageScrollStateChanged(int arg0) {
- }
- });
- }
-
- // 启动循环广告的线程
- private void startADRotate() {
- // 一个广告的时候不用转
- if (ivList == null || ivList.size() <= 1) {
- return;
- }
- if (mThread == null) {
- mThread = new Thread(new Runnable() {
-
- @Override
- public void run() {
- // 当没离开该页面时一直转
- while (!isStopThread) {
- // 每隔5秒转一次
- SystemClock.sleep(5000);
- // 在主线程更新界面
- mHandler.sendEmptyMessage(TYPE_CHANGE_AD);
- }
- }
- });
- mThread.start();
- }
- }
-
- // 停止循环广告的线程,清空消息队列
- public void stopADRotate() {
- isStopThread = true;
- if (mHandler != null && mHandler.hasMessages(TYPE_CHANGE_AD)) {
- mHandler.removeMessages(TYPE_CHANGE_AD);
- }
- }
-
-}
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderBannerView.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderBannerView.java
new file mode 100644
index 0000000..75e669a
--- /dev/null
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderBannerView.java
@@ -0,0 +1,165 @@
+package com.sunfusheng.StickyHeaderListView.view;
+
+import android.app.Activity;
+import android.os.Handler;
+import android.os.Message;
+import android.support.v4.view.ViewPager;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.AccelerateDecelerateInterpolator;
+import android.widget.AbsListView;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.RelativeLayout;
+
+import com.sunfusheng.StickyHeaderListView.R;
+import com.sunfusheng.StickyHeaderListView.adapter.HeaderBannerAdapter;
+import com.sunfusheng.StickyHeaderListView.util.DensityUtil;
+import com.sunfusheng.glideimageview.GlideImageView;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+public class HeaderBannerView extends AbsHeaderView> {
+
+ @BindView(R.id.vp_banner)
+ ViewPager vpBanner;
+ @BindView(R.id.ll_index_container)
+ LinearLayout llIndexContainer;
+ @BindView(R.id.rl_banner)
+ RelativeLayout rlBanner;
+
+ private static final int BANNER_TYPE = 0;
+ private static final int BANNER_TIME = 5000; // ms
+ private List ivList;
+ private int bannerHeight;
+ private int bannerCount;
+
+ private Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ super.handleMessage(msg);
+ if (msg.what == BANNER_TYPE) {
+ vpBanner.setCurrentItem(vpBanner.getCurrentItem() + 1);
+ enqueueBannerLoopMessage();
+ }
+ }
+ };
+
+ public HeaderBannerView(Activity context) {
+ super(context);
+ ivList = new ArrayList<>();
+ bannerHeight = DensityUtil.getWindowWidth(context) * 9 / 16;
+ }
+
+ @Override
+ protected void getView(List list, ListView listView) {
+ View view = mInflate.inflate(R.layout.header_banner_layout, listView, false);
+ ButterKnife.bind(this, view);
+
+ dealWithTheView(list);
+ listView.addHeaderView(view);
+ }
+
+ private void dealWithTheView(List list) {
+ ivList.clear();
+
+ bannerCount = list.size();
+ if (bannerCount == 2) {
+ list.addAll(list);
+ }
+
+ AbsListView.LayoutParams layoutParams = (AbsListView.LayoutParams) rlBanner.getLayoutParams();
+ layoutParams.height = bannerHeight;
+ rlBanner.setLayoutParams(layoutParams);
+
+ createImageViews(list);
+
+ HeaderBannerAdapter adapter = new HeaderBannerAdapter(ivList);
+ vpBanner.setAdapter(adapter);
+
+ addIndicatorImageViews();
+ setViewPagerChangeListener();
+ controlViewPagerSpeed(vpBanner, 500);
+ }
+
+ // 创建要显示的ImageView
+ private void createImageViews(List list) {
+ for (int i = 0; i < list.size(); i++) {
+ GlideImageView imageView = new GlideImageView(mActivity);
+ AbsListView.LayoutParams params = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+ imageView.setLayoutParams(params);
+ imageView.loadImage(list.get(i), R.color.font_black_6);
+ imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
+ ivList.add(imageView);
+ }
+ }
+
+ // 添加指示图标
+ private void addIndicatorImageViews() {
+ llIndexContainer.removeAllViews();
+ if (bannerCount < 2) return;
+ for (int i = 0; i < bannerCount; i++) {
+ ImageView iv = new ImageView(mActivity);
+ LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(DensityUtil.dip2px(mActivity, 5), DensityUtil.dip2px(mActivity, 5));
+ lp.leftMargin = DensityUtil.dip2px(mActivity, (i == 0) ? 0 : 7);
+ iv.setLayoutParams(lp);
+ iv.setBackgroundResource(R.drawable.xml_round_orange_grey_sel);
+ iv.setEnabled(i == 0);
+ llIndexContainer.addView(iv);
+ }
+ }
+
+ // 为ViewPager设置监听器
+ private void setViewPagerChangeListener() {
+ vpBanner.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+ @Override
+ public void onPageSelected(int position) {
+ if (ivList == null || ivList.size() == 0) return;
+ int newPosition = position % bannerCount;
+ for (int i = 0; i < bannerCount; i++) {
+ llIndexContainer.getChildAt(i).setEnabled(i == newPosition);
+ }
+ }
+
+ @Override
+ public void onPageScrolled(int position, float arg1, int arg2) {
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int arg0) {
+ }
+ });
+ }
+
+ // 添加Banner循环消息到队列
+ public void enqueueBannerLoopMessage() {
+ if (ivList == null || ivList.size() <= 1) return;
+ mHandler.sendEmptyMessageDelayed(BANNER_TYPE, BANNER_TIME);
+ }
+
+ // 移除Banner循环的消息
+ public void removeBannerLoopMessage() {
+ if (mHandler.hasMessages(BANNER_TYPE)) {
+ mHandler.removeMessages(BANNER_TYPE);
+ }
+ }
+
+ // 反射设置ViewPager的轮播速度
+ private void controlViewPagerSpeed(ViewPager viewPager, int speedTimeMillis) {
+ try {
+ Field field = ViewPager.class.getDeclaredField("mScroller");
+ field.setAccessible(true);
+ FixedSpeedScroller scroller = new FixedSpeedScroller(mActivity, new AccelerateDecelerateInterpolator());
+ scroller.setDuration(speedTimeMillis);
+ field.set(viewPager, scroller);
+ } catch (Exception e) {
+ }
+ }
+
+}
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderChannelViewView.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderChannelView.java
similarity index 57%
rename from app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderChannelViewView.java
rename to app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderChannelView.java
index 831c215..d862260 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderChannelViewView.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderChannelView.java
@@ -2,26 +2,28 @@
import android.app.Activity;
import android.view.View;
+import android.widget.AdapterView;
import android.widget.ListView;
import com.sunfusheng.StickyHeaderListView.R;
import com.sunfusheng.StickyHeaderListView.adapter.HeaderChannelAdapter;
import com.sunfusheng.StickyHeaderListView.model.ChannelEntity;
+import com.sunfusheng.StickyHeaderListView.util.ToastUtil;
import java.util.List;
-import butterknife.Bind;
+import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by sunfusheng on 16/4/20.
*/
-public class HeaderChannelViewView extends HeaderViewInterface> {
+public class HeaderChannelView extends AbsHeaderView> {
- @Bind(R.id.gv_channel)
+ @BindView(R.id.gv_channel)
FixedGridView gvChannel;
- public HeaderChannelViewView(Activity context) {
+ public HeaderChannelView(Activity context) {
super(context);
}
@@ -34,9 +36,9 @@ protected void getView(List list, ListView listView) {
listView.addHeaderView(view);
}
- private void dealWithTheView(List list) {
+ private void dealWithTheView(final List list) {
+ if (list == null || list.size() < 2) return;
int size = list.size();
-
if (size <= 4) {
gvChannel.setNumColumns(size);
} else if (size == 6) {
@@ -44,11 +46,18 @@ private void dealWithTheView(List list) {
} else if (size == 8) {
gvChannel.setNumColumns(4);
} else {
- gvChannel.setNumColumns(4);
+ return;
}
- HeaderChannelAdapter adapter = new HeaderChannelAdapter(mContext, list);
+ final HeaderChannelAdapter adapter = new HeaderChannelAdapter(mActivity, list);
gvChannel.setAdapter(adapter);
+
+ gvChannel.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> parent, View view, int position, long id) {
+ ToastUtil.show(mActivity, adapter.getItem(position).getTitle());
+ }
+ });
}
}
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderDividerViewView.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderDividerView.java
similarity index 78%
rename from app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderDividerViewView.java
rename to app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderDividerView.java
index 31badee..c699077 100644
--- a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderDividerViewView.java
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderDividerView.java
@@ -9,9 +9,9 @@
/**
* Created by sunfusheng on 16/4/20.
*/
-public class HeaderDividerViewView extends HeaderViewInterface {
+public class HeaderDividerView extends AbsHeaderView {
- public HeaderDividerViewView(Activity context) {
+ public HeaderDividerView(Activity context) {
super(context);
}
diff --git a/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderFilterView.java b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderFilterView.java
new file mode 100644
index 0000000..be181bd
--- /dev/null
+++ b/app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderFilterView.java
@@ -0,0 +1,36 @@
+package com.sunfusheng.StickyHeaderListView.view;
+
+import android.app.Activity;
+import android.view.View;
+import android.widget.ListView;
+
+import com.sunfusheng.StickyHeaderListView.R;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+/**
+ * Created by sunfusheng on 16/4/20.
+ */
+public class HeaderFilterView extends AbsHeaderView