日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AutoHomeRefreshListView仿汽车之家下拉刷新 《IT蓝豹》

發布時間:2023/12/19 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AutoHomeRefreshListView仿汽车之家下拉刷新 《IT蓝豹》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

AutoHomeRefreshListView仿汽車之家下拉刷新

AutoHomeRefreshListView 高仿汽車之家下拉刷新 ,下拉的時候出現很不錯的效果。
本項目來自:https://github.com/nugongshou110/AutoHomeRefreshListView
首先是自定義AutoHomeListView,繼承ListView實現的
重要代碼如下:

public class AutoHomeListView extends ListView implements AbsListView.OnScrollListener{
?? ?private static final int DONE = 0;
?? ?private static final int PULL_TO_REFRESH = 1;
?? ?private static final int RELEASE_TO_REFRESH = 2;
?? ?private static final int REFRESHING = 3;
?? ?private static final int RATIO = 4;
?? ?private LinearLayout headerView;
?? ?private AutoHome mAutoHome;
?? ?private int headerViewHeight;
?? ?private float startY;
?? ?private float currentProgress;
?? ?private int currentHeight;
?? ?private float offsetY;
?? ?private TextView tv_pull_to_refresh;
?? ?private OnAutoHomeRefreshListener mOnRefreshListener;
?? ?private int state;
?? ?private int mFirstVisibleItem;
?? ?private boolean isRecord;
?? ?private boolean isEnd;
?? ?private boolean isRefreable;
?? ?private FrameLayout mAnimContainer;
?? ?private PointerView mAutoHomeAnim;
?? ?private Animation animation;


?? ?public AutoHomeListView(Context context) {
?? ??? ?super(context);
?? ??? ?init(context);
?? ?}

?? ?public AutoHomeListView(Context context, AttributeSet attrs) {
?? ??? ?super(context, attrs);
?? ??? ?init(context);
?? ?}

?? ?public AutoHomeListView(Context context, AttributeSet attrs, int defStyleAttr) {
?? ??? ?super(context, attrs, defStyleAttr);
?? ??? ?init(context);
?? ?}

?? ?public interface OnAutoHomeRefreshListener{
?? ??? ?void onRefresh();
?? ?}
?? ?public void setOnAutoHomeRefreshListener(OnAutoHomeRefreshListener onRefreshListener){
?? ??? ?mOnRefreshListener = onRefreshListener;
?? ??? ?isRefreable = true;
?? ?}
?? ?public void setOnRefreshComplete(){
?? ??? ?isEnd = true;
?? ??? ?state = DONE;
?? ??? ?changeHeaderByState(state);
?? ?}

?? ?private void init(Context context) {
?? ??? ?setOverScrollMode(View.OVER_SCROLL_NEVER);
?? ??? ?setOnScrollListener(this);
?? ??? ?
?? ??? ?headerView = (LinearLayout) LayoutInflater.from(context).inflate(R.layout.autohome_item, null, false);
?? ??? ?mAutoHome = (AutoHome) headerView.findViewById(R.id.auto_home);
?? ??? ?tv_pull_to_refresh = (TextView) headerView.findViewById(R.id.tv_pull_to_refresh);
?? ??? ?mAnimContainer = (FrameLayout) headerView.findViewById(R.id.anim_container);
?? ??? ?mAutoHomeAnim = (PointerView) headerView.findViewById(R.id.anim_pointer);
?? ??? ?
?? ??? ?animation = AnimationUtils.loadAnimation(context, R.anim.pointer_rotate);
?? ??? ?
?? ??? ?measureView(headerView);
?? ??? ?addHeaderView(headerView);
?? ??? ?headerViewHeight = headerView.getMeasuredHeight();
?? ??? ?headerView.setPadding(0, -headerViewHeight, 0, 0);

?? ??? ?state = DONE;
?? ??? ?isEnd = true;
?? ??? ?isRefreable = false;
?? ?}

?

?? ?@Override
?? ?public void onScrollStateChanged(AbsListView absListView, int i) {
?? ?}
?? ?@Override
?? ?public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
?? ??? ?mFirstVisibleItem = firstVisibleItem;
?? ?}

?? ?@Override
?? ?public boolean onTouchEvent(MotionEvent ev) {
?? ??? ?if (isEnd) {
?? ??? ??? ?if (isRefreable) {
?? ??? ??? ??? ?switch (ev.getAction()){
?? ??? ??? ??? ?case MotionEvent.ACTION_DOWN:
?? ??? ??? ??? ??? ?if (mFirstVisibleItem == 0 && !isRecord) {
?? ??? ??? ??? ??? ??? ?isRecord = true;
?? ??? ??? ??? ??? ??? ?startY = ev.getY();
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?case MotionEvent.ACTION_MOVE:
?? ??? ??? ??? ??? ?float tempY = ev.getY();
?? ??? ??? ??? ??? ?if (mFirstVisibleItem == 0 && !isRecord) {
?? ??? ??? ??? ??? ??? ?isRecord = true;
?? ??? ??? ??? ??? ??? ?startY = tempY;
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?if (state!=REFRESHING && isRecord ) {
?? ??? ??? ??? ??? ??? ?offsetY = tempY - startY;
?? ??? ??? ??? ??? ??? ?float currentHeight = (-headerViewHeight+offsetY/3);
?? ??? ??? ??? ??? ??? ?float currentProgress = 1+currentHeight/headerViewHeight;
?? ??? ??? ??? ??? ??? ?if (currentProgress>=1) {
?? ??? ??? ??? ??? ??? ??? ?currentProgress = 1;
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?if (state == RELEASE_TO_REFRESH && isRecord) {
?? ??? ??? ??? ??? ??? ??? ?setSelection(0);
?? ??? ??? ??? ??? ??? ??? ?if (-headerViewHeight+offsetY/3<0) {
?? ??? ??? ??? ??? ??? ??? ??? ?state = PULL_TO_REFRESH;
?? ??? ??? ??? ??? ??? ??? ??? ?changeHeaderByState(state);
?? ??? ??? ??? ??? ??? ??? ?}else if (offsetY<=0) {
?? ??? ??? ??? ??? ??? ??? ??? ?state = DONE;
?? ??? ??? ??? ??? ??? ??? ??? ?changeHeaderByState(state);
?? ??? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?if (state == PULL_TO_REFRESH && isRecord) {
?? ??? ??? ??? ??? ??? ??? ?setSelection(0);
?? ??? ??? ??? ??? ??? ??? ?if (-headerViewHeight+offsetY/3>=0) {
?? ??? ??? ??? ??? ??? ??? ??? ?state = RELEASE_TO_REFRESH;
?? ??? ??? ??? ??? ??? ??? ??? ?changeHeaderByState(state);
?? ??? ??? ??? ??? ??? ??? ?}else if (offsetY<=0) {
?? ??? ??? ??? ??? ??? ??? ??? ?state = DONE;
?? ??? ??? ??? ??? ??? ??? ??? ?changeHeaderByState(state);
?? ??? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?if (state == DONE && isRecord) {
?? ??? ??? ??? ??? ??? ??? ?if (offsetY>=0) {
?? ??? ??? ??? ??? ??? ??? ??? ?state = PULL_TO_REFRESH;
?? ??? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?if (state == PULL_TO_REFRESH) {
?? ??? ??? ??? ??? ??? ??? ?Log.i("zhangqi", ""+(int)(-headerViewHeight+offsetY/3));
?? ??? ??? ??? ??? ??? ??? ?headerView.setPadding(0,(int)(-headerViewHeight+offsetY/3) ,0,0);
?? ??? ??? ??? ??? ??? ??? ?mAutoHome.setCurrentProgress(currentProgress);
?? ??? ??? ??? ??? ??? ??? ?mAutoHome.postInvalidate();
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ??? ?if (state == RELEASE_TO_REFRESH) {
?? ??? ??? ??? ??? ??? ??? ?headerView.setPadding(0,(int)(-headerViewHeight+offsetY/3) ,0, 0);
?? ??? ??? ??? ??? ??? ??? ?mAutoHome.setCurrentProgress(currentProgress);
?? ??? ??? ??? ??? ??? ??? ?mAutoHome.postInvalidate();
?? ??? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ?
?? ??? ??? ??? ??? ?
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?case MotionEvent.ACTION_UP:
?? ??? ??? ??? ??? ?if (state == PULL_TO_REFRESH) {
?? ??? ??? ??? ??? ??? ?this.smoothScrollBy((int)(-headerViewHeight+offsetY/3)+headerViewHeight, 500);
?? ??? ??? ??? ??? ??? ?changeHeaderByState(state);
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?if (state == RELEASE_TO_REFRESH) {
?? ??? ??? ??? ??? ??? ?this.smoothScrollBy((int)(-headerViewHeight+offsetY/3), 500);
?? ??? ??? ??? ??? ??? ?state = REFRESHING;
?? ??? ??? ??? ??? ??? ?mOnRefreshListener.onRefresh();
?? ??? ??? ??? ??? ??? ?changeHeaderByState(state);
?? ??? ??? ??? ??? ?}
?? ??? ??? ??? ??? ?isRecord = false;
?? ??? ??? ??? ??? ?break;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?
?? ??? ??? ?}
?? ??? ?}
?? ??? ?return super.onTouchEvent(ev);
?? ?}
?? ?
?? ?private void changeHeaderByState(int state){
?? ??? ?switch (state) {
?? ??? ?case DONE:
?? ??? ??? ?headerView.setPadding(0, -headerViewHeight, 0, 0);
?? ??? ??? ?mAutoHome.setVisibility(View.VISIBLE);
?? ??? ??? ?mAutoHomeAnim.clearAnimation();
?? ??? ??? ?mAnimContainer.setVisibility(View.GONE);
?? ??? ??? ?break;
?? ??? ?case RELEASE_TO_REFRESH:
?? ??? ??? ?tv_pull_to_refresh.setText("放開刷新");
?? ??? ?
?? ??? ??? ?break;
?? ??? ?case PULL_TO_REFRESH:
?? ??? ??? ?tv_pull_to_refresh.setText("下拉刷新");
?? ??? ??? ?state = DONE;
?? ??? ??? ?mAutoHome.setVisibility(View.VISIBLE);
?? ??? ??? ?mAutoHomeAnim.clearAnimation();
?? ??? ??? ?mAnimContainer.setVisibility(View.GONE);
?? ??? ??? ?break;
?? ??? ?case REFRESHING:
?? ??? ??? ?tv_pull_to_refresh.setText("正在刷新");
?? ??? ??? ?mAutoHome.setVisibility(View.GONE);
?? ??? ??? ?mAnimContainer.setVisibility(View.VISIBLE);
?? ??? ??? ?mAutoHomeAnim.clearAnimation();
?? ??? ??? ?mAutoHomeAnim.startAnimation(animation);
?? ??? ??? ?break;
?? ??? ?default:
?? ??? ??? ?break;
?? ??? ?}
?? ?}
?? ?
?? ?
?? ?private void measureView(View child) {
?? ??? ?ViewGroup.LayoutParams p = child.getLayoutParams();
?? ??? ?if (p == null) {
?? ??? ??? ?p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_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);
?? ?}


}


//如何調用
??????? mAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,mDatas);
??????? mListView = (AutoHomeListView) findViewById(R.id.listview);
??????? mListView.setAdapter(mAdapter);
??????? mListView.setOnAutoHomeRefreshListener(this);

?

運行效果:

相關代碼

  • AutoHomeRefreshListView仿汽車之家下拉刷新

  • PercentageBar自定義動態柱形圖

  • Hide-Music-Player 一個完整的音樂播放器

  • FoldableLayout展開效果

  • ProgressRoundButton下載進度按鈕變化動畫

  • android 過渡動畫研究

  • android資訊類軟件框架

  • QuickSand圖片點擊后分裂成幾份消失效果

  • MaterialPowerMenu 點擊按鈕切換頁面加載呈現效果

  • PlayNewsStandDemo資訊類新聞客戶端框架


轉載于:https://my.oschina.net/u/2461971/blog/524883

總結

以上是生活随笔為你收集整理的AutoHomeRefreshListView仿汽车之家下拉刷新 《IT蓝豹》的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。