Skip to content

Commit de3624a

Browse files
committed
Fix bug
1 parent 74ffe5c commit de3624a

File tree

8 files changed

+110
-112
lines changed

8 files changed

+110
-112
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ android {
88
applicationId "com.sunfusheng.StickyHeaderListView"
99
minSdkVersion 11
1010
targetSdkVersion 23
11-
versionCode 5
12-
versionName "1.4"
11+
versionCode 6
12+
versionName "1.5"
1313
}
1414

1515
buildTypes {

app/src/main/java/com/sunfusheng/StickyHeaderListView/adapter/HeaderAdAdapter.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
import android.view.ViewGroup;
77
import android.widget.ImageView;
88

9-
import com.sunfusheng.StickyHeaderListView.manager.ImageManager;
10-
119
import java.util.List;
1210

1311
/**
@@ -17,19 +15,15 @@ public class HeaderAdAdapter extends PagerAdapter {
1715

1816
private Context mContext;
1917
private List<ImageView> ivList; // ImageView的集合
20-
private List<String> adList; // 广告链接
2118
private int count = 1; // 广告的数量
22-
private ImageManager mImageManager;
2319

24-
public HeaderAdAdapter(Context context, List<String> adList, List<ImageView> ivList) {
20+
public HeaderAdAdapter(Context context, List<ImageView> ivList) {
2521
super();
2622
this.mContext = context;
27-
this.adList = adList;
2823
this.ivList = ivList;
2924
if(ivList != null && ivList.size() > 0){
3025
count = ivList.size();
3126
}
32-
mImageManager = new ImageManager(context);
3327
}
3428

3529
@Override
@@ -55,9 +49,7 @@ public Object instantiateItem(ViewGroup container, int position) {
5549
int newPosition = position % count;
5650
// 先移除在添加,更新图片在container中的位置(把iv放至container末尾)
5751
ImageView iv = ivList.get(newPosition);
58-
String url = adList.get(newPosition);
5952
container.removeView(iv);
60-
mImageManager.loadUrlImage(url, iv);
6153
container.addView(iv);
6254
return iv;
6355
}

app/src/main/java/com/sunfusheng/StickyHeaderListView/ui/AboutActivity.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
package com.sunfusheng.StickyHeaderListView.ui;
22

3+
import android.content.Context;
4+
import android.content.pm.PackageInfo;
5+
import android.content.pm.PackageManager;
36
import android.os.Build;
47
import android.os.Bundle;
58
import android.support.v7.app.ActionBar;
69
import android.support.v7.app.AppCompatActivity;
710
import android.support.v7.widget.Toolbar;
11+
import android.text.TextUtils;
812
import android.view.KeyEvent;
913
import android.view.Menu;
1014
import android.view.MenuItem;
@@ -40,7 +44,7 @@ protected void onCreate(Bundle savedInstanceState) {
4044
}
4145

4246
private void initView() {
43-
initToolBar(toolbar, true, "关于");
47+
initToolBar(toolbar, true, "关于 (V" + getVersionName(this) + ")");
4448

4549
settings = webView.getSettings();
4650
settings.setJavaScriptEnabled(true); //如果访问的页面中有Javascript,则WebView必须设置支持Javascript
@@ -82,6 +86,21 @@ public boolean shouldOverrideUrlLoading(WebView view, String url) {
8286
});
8387
}
8488

89+
// 获取当前应用的版本号
90+
public static String getVersionName(Context context) {
91+
try {
92+
PackageManager packageManager = context.getPackageManager();
93+
PackageInfo packInfo = packageManager.getPackageInfo(context.getPackageName(),0);
94+
String version = packInfo.versionName;
95+
if (!TextUtils.isEmpty(version)) {
96+
return version;
97+
}
98+
} catch (Exception e) {
99+
e.printStackTrace();
100+
}
101+
return "";
102+
}
103+
85104
public void initToolBar(Toolbar toolbar, boolean homeAsUpEnabled, String title) {
86105
toolbar.setTitle(title);
87106
setSupportActionBar(toolbar);

app/src/main/java/com/sunfusheng/StickyHeaderListView/ui/MainActivity.java

Lines changed: 81 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -158,69 +158,30 @@ private void initView() {
158158
filterViewPosition = smoothListView.getHeaderViewsCount() - 1;
159159
}
160160

161-
private void initListener() {
162-
smoothListView.setRefreshEnable(true);
163-
smoothListView.setLoadMoreEnable(true);
164-
smoothListView.setSmoothListViewListener(this);
165-
smoothListView.setOnScrollListener(new SmoothListView.OnSmoothScrollListener() {
166-
@Override
167-
public void onSmoothScrolling(View view) {}
168-
169-
@Override
170-
public void onScrollStateChanged(AbsListView view, int scrollState) {}
161+
private boolean isScrollIdle = true;
162+
View headerAdView;
163+
View headerFilterView;
171164

165+
private void initListener() {
166+
// 关于
167+
flActionMore.setOnClickListener(new View.OnClickListener() {
172168
@Override
173-
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
174-
View adView = smoothListView.getChildAt(1 - firstVisibleItem);
175-
if (adView != null) {
176-
adViewTopSpace = DensityUtil.px2dip(mContext, adView.getTop());
177-
adViewHeight = DensityUtil.px2dip(mContext, adView.getHeight());
178-
}
179-
180-
View filterView = smoothListView.getChildAt(filterViewPosition - firstVisibleItem);
181-
if (filterView != null) {
182-
filterViewTopSpace = DensityUtil.px2dip(mContext, filterView.getTop());
183-
}
184-
185-
// 处理筛选是否吸附在顶部
186-
if (filterViewTopSpace > titleViewHeight) {
187-
isStickyTop = false; // 没有吸附在顶部
188-
fvTopFilter.setVisibility(View.INVISIBLE);
189-
} else {
190-
isStickyTop = true; // 吸附在顶部
191-
fvTopFilter.setVisibility(View.VISIBLE);
192-
}
193-
194-
if (firstVisibleItem > filterViewPosition) {
195-
isStickyTop = true;
196-
fvTopFilter.setVisibility(View.VISIBLE);
197-
}
198-
199-
if (isSmooth && isStickyTop) {
200-
isSmooth = false;
201-
fvTopFilter.showFilterLayout(filterPosition);
202-
}
203-
204-
fvTopFilter.setStickyTop(isStickyTop);
205-
206-
// 处理标题栏颜色渐变
207-
handleTitleBarColorEvaluate();
169+
public void onClick(View v) {
170+
startActivity(new Intent(mActivity, AboutActivity.class));
208171
}
209172
});
210173

211-
// (真正的)筛选视图点击
174+
// (假的ListView头部展示的)筛选视图点击
212175
headerFilterViewView.setOnFilterClickListener(new HeaderFilterViewView.OnFilterClickListener() {
213176
@Override
214177
public void onFilterClick(int position) {
215-
if (!isStickyTop) {
216-
filterPosition = position;
217-
isSmooth = true;
218-
smoothListView.smoothScrollToPositionFromTop(filterViewPosition, DensityUtil.dip2px(mContext, titleViewHeight));
219-
}
178+
filterPosition = position;
179+
isSmooth = true;
180+
smoothListView.smoothScrollToPositionFromTop(filterViewPosition, DensityUtil.dip2px(mContext, titleViewHeight));
220181
}
221182
});
222183

223-
// (假的ListView头部展示的)筛选视图点击
184+
// (真正的)筛选视图点击
224185
fvTopFilter.setOnFilterClickListener(new FilterView.OnFilterClickListener() {
225186
@Override
226187
public void onFilterClick(int position) {
@@ -234,14 +195,6 @@ public void onFilterClick(int position) {
234195
}
235196
});
236197

237-
// 关于
238-
flActionMore.setOnClickListener(new View.OnClickListener() {
239-
@Override
240-
public void onClick(View v) {
241-
startActivity(new Intent(mActivity, AboutActivity.class));
242-
}
243-
});
244-
245198
// 分类Item点击
246199
fvTopFilter.setOnItemCategoryClickListener(new FilterView.OnItemCategoryClickListener() {
247200
@Override
@@ -265,6 +218,65 @@ public void onItemFilterClick(FilterEntity entity) {
265218
fillAdapter(ModelUtil.getFilterTravelingData(entity));
266219
}
267220
});
221+
222+
smoothListView.setRefreshEnable(true);
223+
smoothListView.setLoadMoreEnable(true);
224+
smoothListView.setSmoothListViewListener(this);
225+
smoothListView.setOnScrollListener(new SmoothListView.OnSmoothScrollListener() {
226+
@Override
227+
public void onSmoothScrolling(View view) {}
228+
229+
@Override
230+
public void onScrollStateChanged(AbsListView view, int scrollState) {
231+
isScrollIdle = (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE);
232+
}
233+
234+
@Override
235+
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
236+
if (isScrollIdle && adViewTopSpace < 0) return;
237+
238+
// 获取广告头部View、自身的高度、距离顶部的高度
239+
if (headerAdView == null) {
240+
headerAdView = smoothListView.getChildAt(1-firstVisibleItem);
241+
}
242+
if (headerAdView != null) {
243+
adViewTopSpace = DensityUtil.px2dip(mContext, headerAdView.getTop());
244+
adViewHeight = DensityUtil.px2dip(mContext, headerAdView.getHeight());
245+
}
246+
247+
// 获取筛选View、距离顶部的高度
248+
if (headerFilterView == null) {
249+
headerFilterView = smoothListView.getChildAt(filterViewPosition - firstVisibleItem);
250+
}
251+
if (headerFilterView != null) {
252+
filterViewTopSpace = DensityUtil.px2dip(mContext, headerFilterView.getTop());
253+
}
254+
255+
// 处理筛选是否吸附在顶部
256+
if (filterViewTopSpace > titleViewHeight) {
257+
isStickyTop = false; // 没有吸附在顶部
258+
fvTopFilter.setVisibility(View.INVISIBLE);
259+
} else {
260+
isStickyTop = true; // 吸附在顶部
261+
fvTopFilter.setVisibility(View.VISIBLE);
262+
}
263+
264+
if (firstVisibleItem > filterViewPosition) {
265+
isStickyTop = true;
266+
fvTopFilter.setVisibility(View.VISIBLE);
267+
}
268+
269+
if (isSmooth && isStickyTop) {
270+
isSmooth = false;
271+
fvTopFilter.showFilterLayout(filterPosition);
272+
}
273+
274+
fvTopFilter.setStickyTop(isStickyTop);
275+
276+
// 处理标题栏颜色渐变
277+
handleTitleBarColorEvaluate();
278+
}
279+
});
268280
}
269281

270282
// 填充数据
@@ -283,23 +295,26 @@ private void fillAdapter(List<TravelingEntity> list) {
283295
private void handleTitleBarColorEvaluate() {
284296
float fraction;
285297
if (adViewTopSpace > 0) {
286-
fraction = adViewTopSpace * 1f / 60;
287-
rlBar.setAlpha(1.0f - fraction);
298+
fraction = 1f - adViewTopSpace * 1f / 60;
299+
if (fraction < 0f) fraction = 0f;
300+
rlBar.setAlpha(fraction);
288301
return ;
289302
}
290303

291304
float space = Math.abs(adViewTopSpace) * 1f;
292305
fraction = space / (adViewHeight - titleViewHeight);
293-
rlBar.setAlpha(1.0f);
306+
if (fraction < 0f) fraction = 0f;
307+
if (fraction > 1f) fraction = 1f;
308+
rlBar.setAlpha(1f);
294309

295-
if (fraction > 1.0f || isStickyTop) {
310+
if (fraction >= 1f || isStickyTop) {
296311
isStickyTop = true;
297312
viewTitleBg.setAlpha(0f);
298313
viewActionMoreBg.setAlpha(0f);
299314
rlBar.setBackgroundColor(mContext.getResources().getColor(R.color.orange));
300315
} else {
301-
viewTitleBg.setAlpha(1.0f - fraction);
302-
viewActionMoreBg.setAlpha(1.0f - fraction);
316+
viewTitleBg.setAlpha(1f - fraction);
317+
viewActionMoreBg.setAlpha(1f - fraction);
303318
rlBar.setBackgroundColor(ColorUtil.getNewColorByStartEndColor(mContext, fraction, R.color.transparent, R.color.orange));
304319
}
305320
}

app/src/main/java/com/sunfusheng/StickyHeaderListView/view/HeaderAdViewView.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import com.sunfusheng.StickyHeaderListView.R;
1616
import com.sunfusheng.StickyHeaderListView.adapter.HeaderAdAdapter;
17+
import com.sunfusheng.StickyHeaderListView.manager.ImageManager;
1718
import com.sunfusheng.StickyHeaderListView.util.DensityUtil;
1819

1920
import java.util.ArrayList;
@@ -32,8 +33,8 @@ public class HeaderAdViewView extends HeaderViewInterface<List<String>> {
3233
private static final int TYPE_CHANGE_AD = 0;
3334
private Thread mThread;
3435
private List<ImageView> ivList;
35-
private List<String> adList;
3636
private boolean isStopThread = false;
37+
private ImageManager mImageManager;
3738

3839
private Handler mHandler = new Handler() {
3940
@Override
@@ -48,11 +49,11 @@ public void handleMessage(Message msg) {
4849
public HeaderAdViewView(Activity context) {
4950
super(context);
5051
ivList = new ArrayList<>();
52+
mImageManager = new ImageManager(context);
5153
}
5254

5355
@Override
5456
protected void getView(List<String> list, ListView listView) {
55-
adList = list;
5657
View view = mInflate.inflate(R.layout.header_ad_layout, listView, false);
5758
ButterKnife.bind(this, view);
5859

@@ -67,7 +68,7 @@ private void dealWithTheView(List<String> list) {
6768
ivList.add(createImageView(list.get(i)));
6869
}
6970

70-
HeaderAdAdapter photoAdapter = new HeaderAdAdapter(mContext, adList, ivList);
71+
HeaderAdAdapter photoAdapter = new HeaderAdAdapter(mContext, ivList);
7172
vpAd.setAdapter(photoAdapter);
7273

7374
addIndicatorImageViews(size);
@@ -81,6 +82,7 @@ private ImageView createImageView(String url) {
8182
AbsListView.LayoutParams params = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
8283
imageView.setLayoutParams(params);
8384
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
85+
mImageManager.loadUrlImage(url, imageView);
8486
return imageView;
8587
}
8688

@@ -132,7 +134,7 @@ public void onPageScrollStateChanged(int arg0) {
132134
// 启动循环广告的线程
133135
private void startADRotate() {
134136
// 一个广告的时候不用转
135-
if (adList == null || adList.size() <= 1) {
137+
if (ivList == null || ivList.size() <= 1) {
136138
return;
137139
}
138140
if (mThread == null) {

app/src/main/res/anim/anim_pop_in.xml

Lines changed: 0 additions & 9 deletions
This file was deleted.

app/src/main/res/anim/anim_pop_out.xml

Lines changed: 0 additions & 9 deletions
This file was deleted.

app/src/main/res/values/styles.xml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,4 @@
99
<item name="android:fitsSystemWindows">true</item>
1010
</style>
1111

12-
<style name="BlogCardStyle" parent="CardView">
13-
<item name="contentPadding">0dp</item>
14-
<item name="cardCornerRadius">2dp</item>
15-
<item name="cardPreventCornerOverlap">false</item>
16-
<item name="cardElevation">3dp</item>
17-
</style>
18-
19-
<style name="PopupWindowAnimStyle">
20-
<item name="android:windowEnterAnimation">@anim/anim_pop_in</item>
21-
<item name="android:windowExitAnimation">@anim/anim_pop_out</item>
22-
</style>
23-
2412
</resources>

0 commit comments

Comments
 (0)