안드로이드에서는 사용자가 위로 스크롤 할 때 나타나는 버튼이 있으며, 그렇지 않으면 사라집니다. 그러나, 또한 나타납니다 때, 사용자가 스크롤을 중지 한 경우 3 초 후에 다시 사라지게하려면 노력하고 있습니다 (유휴중인 3 초 후). 다음 코드를 시도했습니다.버튼을 3 초 후에 보이지 않게 설정하지만 사용자가 위로 스크롤하면 보이지 않게 설정하십시오.
//detecting whether the user is scrolling up or down, to make the refresh button visible/invisible
listView.setOnTouchListener(new View.OnTouchListener() {
int scrollEventListSize = 5;
float lastY;
// Used to correct for occasions when user scrolls down(/up) but the onTouchListener detects it incorrectly. We will store detected up-/down-scrolls with -1/1 in this list and evaluate later which occured more often
List<Integer> downScrolledEventsHappened;
@Override
public boolean onTouch(View v, MotionEvent event) {
float diff = 0;
if(event.getAction() == event.ACTION_DOWN){
lastY = event.getY();
downScrolledEventsHappened = new LinkedList<Integer>();
}
else if(event.getAction() == event.ACTION_MOVE){
diff = event.getY() - lastY;
lastY = event.getY();
if(diff>0)
downScrolledEventsHappened.add(1);
else
downScrolledEventsHappened.add(-1);
//List needs to be filled with some events, will happen very quickly
if(downScrolledEventsHappened.size() == scrollEventListSize+1){
downScrolledEventsHappened.remove(0);
int res=0;
for(int i=0; i<downScrolledEventsHappened.size(); i++){
res+=downScrolledEventsHappened.get(i);
}
if (res > 0) {
Log.i("INFO", "Scrolled up");
refreshButton.setVisibility(View.VISIBLE);
}
else {
Log.i("INFO", "Scrolled down");
refreshButton.setVisibility(View.INVISIBLE);
}
}
}
return false; // don't interrupt the event-chain
}
});
//Removing refresh button when user stops scrolling up or already at the top of the list.
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
refreshButton.setVisibility(View.INVISIBLE);
}
}, 3000);
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(firstVisibleItem == 0 && listIsAtTop()){
System.out.println("List at Top....Refresh Button is disappearing...");
refreshButton.setVisibility(View.INVISIBLE);
}
}
});
이 코드는 정확하게 내가 원하는 것을 제공하지 않습니다. 사용자가 유휴 상태 인 3 초 후에 버튼이 사라지는 것은 사실이지만 사용자가 다시 위로 스크롤하는 동안 버튼도 사라집니다. 내 말은, 사용자가 다시 위로 스크롤 할 때 취소 될 아이디어가 3 초 후에 사라지는 메커니즘이 필요하다는 것입니다. 내가 어떻게 할 수 있니? 고맙습니다.
에서 핸들러이
시작 처리기처럼 다시
어떤 이벤트를 보류 핸들러 취소하고 시작 위로 스크롤 할 때 보이기 및 보이기에 대한 가시성은 스크롤 막대에서 3 초 동안 스레드를 실행하기위한 메소드를 호출합니다. 타이머 버튼은 보이지 않게 설정됩니다 – siddhesh