-
// Log.v(“PPMacbook”, “pi:” + (getSelectedItemPosition() - 1));
-
// setSelectionAfterHeaderView();
-
// setSelection(getSelectedItemPosition() - 1);
-
// System.out.println(“PPMacbook:” + (getFirstVisiblePosition() - 1));
-
setSelection((getFirstVisiblePosition() - 1));
-
}
-
}
-
break;
-
case MotionEvent.ACTION_DOWN:
-
mLastMotionY = y;
-
break;
-
case MotionEvent.ACTION_MOVE:
-
applyHeaderPadding(event);
-
break;
-
}
-
return super.onTouchEvent(event);
-
}
-
private void applyHeaderPadding(MotionEvent ev) {
-
final int historySize = ev.getHistorySize();
-
// Workaround for getPointerCount() which is unavailable in 1.5
-
// (it’s always 1 in 1.5)
-
int pointerCount = 1;
-
try {
-
Method method = MotionEvent.class.getMethod(“getPointerCount”);
-
pointerCount = (Integer)method.invoke(ev);
-
} catch (NoSuchMethodException e) {
-
pointerCount = 1;
-
} catch (IllegalArgumentException e) {
-
throw e;
-
} catch (IllegalAccessException e) {
-
System.err.println("unexpected " + e);
-
} catch (InvocationTargetException e) {
-
System.err.println("unexpected " + e);
-
}
-
// Log.i(“PullToRefreshListView”, “historySize:” + historySize);
-
// Log.i(“PullToRefreshListView”, “pointerCount:” + pointerCount);
-
// Log.i(“PullToRefreshListView”, " ");
-
// Log.i(“PullToRefreshListView”, " ");
-
// Log.i(“PullToRefreshListView”, " ");
-
for (int h = 0; h < historySize; h++) {
-
for (int p = 0; p < pointerCount; p++) {
-
if (mRefreshState == RELEASE_TO_REFRESH) {
-
if (isVerticalFadingEdgeEnabled()) {
-
setVerticalScrollBarEnabled(false);
-
}
-
int historicalY = 0;
-
try {
-
// For Android > 2.0
-
Method method = MotionEvent.class.getMethod(
-
“getHistoricalY”, Integer.TYPE, Integer.TYPE);
-
historicalY = ((Float) method.invoke(ev, p, h)).intValue();
-
} catch (NoSuchMethodException e) {
-
// For Android < 2.0
-
historicalY = (int) (ev.getHistoricalY(h));
-
} catch (IllegalArgumentException e) {
-
throw e;
-
} catch (IllegalAccessException e) {
-
System.err.println("unexpected " + e);
-
} catch (InvocationTargetException e) {
-
System.err.println("unexpected " + e);
-
}
-
// Calculate the padding to apply, we divide by 1.7 to
-
// simulate a more resistant effect during pull.
-
int topPadding = (int) (((historicalY + mLastMotionY)
-
+ mRefreshViewHeight) / 1.7);
-
mRefreshView.setPadding(
-
mRefreshView.getPaddingLeft(),
-
mRefreshView.getPaddingTop(),
-
mRefreshView.getPaddingRight(),
-
topPadding);
-
}
-
}
-
}
-
}
-
/**
-
* Sets the header padding back to original size.
-
*/
-
private void resetHeaderPadding() {
-
mRefreshView.setPadding(
-
mRefreshView.getPaddingLeft(),
-
mRefreshView.getPaddingTop(),
-
mRefreshView.getPaddingRight(),
-
mRefreshOriginalBottomPadding);
-
}
-
/**
-
* Resets the header to the original state.
-
*/
-
private void resetHeader() {
-
if (mRefreshState != TAP_TO_REFRESH) {
-
mRefreshState = TAP_TO_REFRESH;
-
resetHeaderPadding();
-
// Set refresh view text to the pull label
-
mRefreshViewText.setText(R.string.pull_to_refresh_tap_label);
-
// Replace refresh drawable with arrow drawable
-
mRefreshViewImage.setImageResource(R.drawable.ic_pulltorefresh_arrow);
-
// Clear the full rotation animation
-
mRefreshViewImage.clearAnimation();
-
// Hide progress bar and arrow.
-
mRefreshViewImage.setVisibility(View.GONE);
-
mRefreshViewProgress.setVisibility(View.GONE);
-
}
-
}
-
private void measureView(View child) {
-
ViewGroup.LayoutParams p = child.getLayoutParams();
-
if (p == null) {
-
p = new ViewGroup.LayoutParams(
-
ViewGroup.LayoutParams.FILL_PARENT,
-
ViewGroup.LayoutParams.WRAP_CONTENT);
-
}
-
int childWidthSpec = ViewGroup.getChildMeasureSpec(0,
-
0 + 0, p.width);
-
int lpHeight = p.height;
-
int childHeightSpec;
-
if (lpHeight > 0) {
-
childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);
-
} else {
-
childHeightSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-
}
-
child.measure(childWidthSpec, childHeightSpec);
-
}
-
@Override
-
public void onScroll(AbsListView view, int firstVisibleItem,
-
int visibleItemCount, int totalItemCount) {
-
// Log.i(“PullToRefreshListView”, “firstVisibleItem:” + firstVisibleItem);
-
// Log.i(“PullToRefreshListView”, “visibleItemCount:” + visibleItemCount);
-
// Log.i(“PullToRefreshListView”, “totalItemCount:” + totalItemCount);
-
// Log.i(“PullToRefreshListView”, “”);
-
// Log.i(“PullToRefreshListView”, “”);
-
// Log.i(“PullToRefreshListView”, “”);
-
// When the refresh view is completely visible, change the text to say
-
// “Release to refresh…” and flip the arrow drawable.
-
if (mCurrentScrollState == SCROLL_STATE_TOUCH_SCROLL
-
&& mRefreshState != REFRESHING) {
-
if (firstVisibleItem + visibleItemCount == totalItemCount) {
-
mRefreshViewImage.setVisibility(View.VISIBLE);
-
if ((
-
mRefreshView.getTop() <= getMeasuredHeight() - mRefreshViewHeight)
-
&& mRefreshState != RELEASE_TO_REFRESH) {
-
mRefreshViewText.setText(R.string.pull_to_refresh_release_label);
-
mRefreshViewImage.clearAnimation();
-
mRefreshViewImage.startAnimation(mFlipAnimation);
-
mRefreshState = RELEASE_TO_REFRESH;
-
} else if (
-
mRefreshView.getTop() >getMeasuredHeight() - 20 - mRefreshViewHeight
-
&& mRefreshState != PULL_TO_REFRESH) {
-
mRefreshViewText.setText(R.string.pull_to_refresh_pull_label);
-
if (mRefreshState != TAP_TO_REFRESH) {
-
mRefreshViewImage.clearAnimation();
-
mRefreshViewImage.startAnimation(mReverseFlipAnimation);
-
}
-
mRefreshState = PULL_TO_REFRESH;
-
}
-
} else {
-
mRefreshViewImage.setVisibility(View.GONE);
-
resetHeader();
-
}
-
} else if (mCurrentScrollState == SCROLL_STATE_FLING
-
&& firstVisibleItem + visibleItemCount == totalItemCount
-
&& mRefreshState != REFRESHING) {
-
//setSelection(1);
-
// Log.i(“PullToRefreshListView”, “Selection:” + (totalItemCount - visibleItemCount));
-
setSelection(getSelectedItemPosition() - 2);
-
//
-
setSelection((getFirstVisiblePosition() - 1));
-
}
-
if (mOnScrollListener != null) {
-
mOnScrollListener.onScroll(view, firstVisibleItem,
-
visibleItemCount, totalItemCount);
-
}
-
}
-
@Override
-
public void onScrollStateChanged(AbsListView view, int scrollState) {
-
mCurrentScrollState = scrollState;
-
if (mOnScrollListener != null) {
-
mOnScrollListener.onScrollStateChanged(view, scrollState);
-
}
-
}
-
public void prepareForRefresh() {
-
resetHeaderPadding();
-
mRefreshViewImage.setVisibility(View.GONE);
-
// We need this hack, otherwise it will keep the previous drawable.
-
mRefreshViewImage.setImageDrawable(null);
-
mRefreshViewProgress.setVisibility(View.VISIBLE);
-
// Set refresh view text to the refreshing label
-
mRefreshViewText.setText(R.string.pull_to_refresh_refreshing_label);
-
mRefreshState = REFRESHING;
-
}
-
public void onRefresh() {
-
Log.d(TAG, “onRefresh”);
-
if (mOnRefreshListener != null) {
-
mOnRefreshListener.onRefresh();
-
}
-
}
-
/**
-
* Resets the list to a normal state after a refresh.
-
* @param lastUpdated Last updated at.
-
*/
-
public void onRefreshComplete(CharSequence lastUpdated) {
-
setLastUpdated(lastUpdated);
-
onRefreshComplete();
-
}
-
/**
-
* Resets the list to a normal state after a refresh.
-
*/
-
public void onRefreshComplete() {
-
Log.d(TAG, “onRefreshComplete”);
-
resetHeader();
-
// If refresh view is visible when loading completes, scroll down to
-
// the next item.
-
if (mRefreshView.getBottom() > 0) {
-
invalidateViews();
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
总结
本文讲解了我对Android开发现状的一些看法,也许有些人会觉得我的观点不对,但我认为没有绝对的对与错,一切交给时间去证明吧!愿与各位坚守的同胞们互相学习,共同进步!
在这里我也分享一份自己收录整理的**Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料**帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习
转存中…(img-5I3d8eUv-1710817003676)]
[外链图片转存中…(img-0swP3eh1-1710817003677)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-Ah7XAvkl-1710817003677)]
总结
本文讲解了我对Android开发现状的一些看法,也许有些人会觉得我的观点不对,但我认为没有绝对的对与错,一切交给时间去证明吧!愿与各位坚守的同胞们互相学习,共同进步!
在这里我也分享一份自己收录整理的**Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料**帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习