-
mRefreshViewImage.setMinimumHeight(50);
-
mRefreshView.setOnClickListener(new OnClickRefreshListener());
-
mRefreshOriginalTopPadding = mRefreshView.getPaddingTop();
-
mRefreshOriginalBottomPadding = mRefreshView.getPaddingBottom();
-
mRefreshState = TAP_TO_REFRESH;
-
// addHeaderView(mRefreshView);
-
addFooterView(mRefreshView);
-
super.setOnScrollListener(this);
-
measureView(mRefreshView);
-
mRefreshViewHeight = mRefreshView.getMeasuredHeight();
-
}
-
@Override
-
protected void onAttachedToWindow() {
-
//setSelection(1);
-
}
-
@Override
-
public void setAdapter(ListAdapter adapter) {
-
super.setAdapter(adapter);
-
//setSelection(1);
-
}
-
/**
-
* Set the listener that will receive notifications every time the list
-
* scrolls.
-
*
-
* @param l The scroll listener.
-
*/
-
@Override
-
public void setOnScrollListener(AbsListView.OnScrollListener l) {
-
mOnScrollListener = l;
-
}
-
/**
-
* Register a callback to be invoked when this list should be refreshed.
-
*
-
* @param onRefreshListener The callback to run.
-
*/
-
public void setOnRefreshListener(OnRefreshListener onRefreshListener) {
-
mOnRefreshListener = onRefreshListener;
-
}
-
/**
-
* Set a text to represent when the list was last updated.
-
* @param lastUpdated Last updated at.
-
*/
-
public void setLastUpdated(CharSequence lastUpdated) {
-
if (lastUpdated != null) {
-
mRefreshViewLastUpdated.setVisibility(View.VISIBLE);
-
mRefreshViewLastUpdated.setText(lastUpdated);
-
} else {
-
mRefreshViewLastUpdated.setVisibility(View.GONE);
-
}
-
}
-
@Override
-
public boolean onTouchEvent(MotionEvent event) {
-
final int y = (int) event.getY();
-
Log.i(“PullToRefreshListView”, “Height:” + getMeasuredHeight());
-
Log.i(“PullToRefreshListView”, “MotionEvent:” + event.getAction());
-
Log.i(“PullToRefreshListView”, “mRefreshState:” + mRefreshState);
-
Log.i(“PullToRefreshListView”, “FirstVisiblePosition:” + getFirstVisiblePosition());
-
Log.i(“PullToRefreshListView”, “LastVisiblePosition:” + getLastVisiblePosition());
-
Log.i(“PullToRefreshListView”, “ChildCount:” + getAdapter().getCount());
-
Log.i(“PullToRefreshListView”, “RefreshViewBottom:” + mRefreshView.getBottom());
-
Log.i(“PullToRefreshListView”, “RefreshViewTop:” + mRefreshView.getTop());
-
Log.i(“PullToRefreshListView”, “mRefreshViewHeight:” + mRefreshViewHeight);
-
Log.i(“PullToRefreshListView”, " ");
-
Log.i(“PullToRefreshListView”, " ");
-
Log.i(“PullToRefreshListView”, " ");
-
switch (event.getAction()) {
-
case MotionEvent.ACTION_UP:
-
if (!isVerticalScrollBarEnabled()) {
-
setVerticalScrollBarEnabled(true);
-
}
-
if (getLastVisiblePosition() == getAdapter().getCount() - 1
-
&& mRefreshState != REFRESHING) {
-
if ((
-
mRefreshView.getTop() <= getMeasuredHeight() - mRefreshViewHeight)
-
&& mRefreshState == RELEASE_TO_REFRESH) {
-
// Log.i(“PullToRefreshListView”, “Fire…”);
-
// Log.i(“PullToRefreshListView”, " ");
-
// Log.i(“PullToRefreshListView”, " ");
-
// Log.i(“PullToRefreshListView”, " ");
-
// Initiate the refresh
-
mRefreshState = REFRESHING;
-
prepareForRefresh();
-
onRefresh();
-
} else if (
-
mRefreshView.getTop() > getMeasuredHeight() - mRefreshViewHeight) {
-
// Abort refresh and scroll down below the refresh view
-
resetHeader();
-
//setSelection(1);
-
// 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();
-
}
最后
上面这些公司都是时下最受欢迎的互联网大厂,他们的职级、薪资、福利也都讲的差不多了,相信大家都是有梦想和野心的人,心里多少应该都有些想法。
也相信很多人也都在为即将到来的金九银十做准备,也有不少人的目标都是这些公司。
我这边有不少朋友都在这些厂工作,其中也有很多人担任过面试官,上面的资料也差不多都是从朋友那边打探来的。除了上面的信息,我这边还有这些大厂近年来的面试真题及解析,以及一些朋友出于兴趣和热爱一起整理的Android时下热门知识点的学习资料。
部分文件:
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
-
public void onRefreshComplete(CharSequence lastUpdated) {
-
setLastUpdated(lastUpdated);
-
onRefreshComplete();
-
}
最后
上面这些公司都是时下最受欢迎的互联网大厂,他们的职级、薪资、福利也都讲的差不多了,相信大家都是有梦想和野心的人,心里多少应该都有些想法。
也相信很多人也都在为即将到来的金九银十做准备,也有不少人的目标都是这些公司。
我这边有不少朋友都在这些厂工作,其中也有很多人担任过面试官,上面的资料也差不多都是从朋友那边打探来的。除了上面的信息,我这边还有这些大厂近年来的面试真题及解析,以及一些朋友出于兴趣和热爱一起整理的Android时下热门知识点的学习资料。
部分文件:
[外链图片转存中…(img-97mEhPvD-1714638009072)]
[外链图片转存中…(img-e1k7zyip-1714638009074)]
[外链图片转存中…(img-uudXlWBL-1714638009075)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!