Android 사용자 정의 컨트롤 ListView 드 롭 다운 새로 고침 코드
원리 해석:일반적으로 드 롭 다운 새로 고침 이 있 는 listview 를 네 가지 서로 다른 상태 로 나 누 어 서로 다른 디 스 플레이 효 과 를 냅 니 다.
완료 상태 done:listview 정상 표시 상태
package com.hapzhu.customlv;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
public class CustomListview extends ListView {
View headerView;
int height;
private TextView tvActionTip;
private ImageView ivArrow;
private ProgressBar pbRefreshing;
final static int STATE_DONE = 1;
final static int STATE_PULL = 2;
final static int STATE_RELEASE = 3;
final static int STATE_REFRESHING = 4;
int currentState;
int downY;
public CustomListview(Context context, AttributeSet attrs) {
super(context, attrs);
headerView = View.inflate(context, R.layout.listview_header, null);
this.addHeaderView(headerView);
// setPadding Top headerview
// GetHeight ,
// measureHeight , 0,0
headerView.measure(0, 0);
height = headerView.getMeasuredHeight();
headerView.setPadding(0, -height, 0, 0);
initView();
//
currentState = STATE_DONE;
}
private void initView() {
tvActionTip = (TextView) headerView.findViewById(R.id.tv_state);
ivArrow = (ImageView) headerView.findViewById(R.id.iv_arrow);
pbRefreshing = (ProgressBar) headerView.findViewById(R.id.progressBar);
}
boolean isRefresh = false;
@Override
public boolean onTouchEvent(MotionEvent ev) {
try {
//
int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN://
if (currentState == STATE_DONE) {//
// Y
downY = (int) ev.getY();
//
currentState = STATE_PULL;
}
break;
case MotionEvent.ACTION_MOVE://
if (currentState == STATE_PULL) {//
int currentY = (int) ev.getY();// Y
int top = currentY - downY - height;// ,
headerView.setPadding(0, top, 0, 0);
if (currentY - downY > height) {// ,
currentState = STATE_RELEASE;
tvActionTip.setText(" ");
}
}
break;
case MotionEvent.ACTION_UP:
if (currentState == STATE_RELEASE) {//
tvActionTip.setText(" ");//
currentState = STATE_REFRESHING;// ,
ivArrow.setVisibility(GONE);//
pbRefreshing.setVisibility(VISIBLE);//
isRefresh = true;
if(onRefreshListener!=null){
// ,
onRefreshListener.OnRefresh(this);
}
} else {
if (!isRefresh) {
// ,
headerView.setPadding(0, -height, 0, 0);
// ,
currentState = STATE_DONE;
}
}
break;
}
} catch (Exception e) {
}
return super.onTouchEvent(ev);
}
// 1
interface OnRefreshListener {
// Custom
public void OnRefresh(CustomListview customLv);
}
// 2.
OnRefreshListener onRefreshListener;
// 3.
public void setOnRefreshListener(OnRefreshListener onRefreshListener) {
this.onRefreshListener = onRefreshListener;
}
public void refreshComplete(){
isRefresh=false;
// ,
headerView.setPadding(0, -height, 0, 0);
// ,
currentState = STATE_DONE;
// , ,
ivArrow.setVisibility(VISIBLE);//
pbRefreshing.setVisibility(GONE);//
tvActionTip.setText(" ");//
}
}
오늘 UML 그림 을 새로 배 워 서 이 상태 그림 을 그 렸 습 니 다.총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.