4
인터넷에서 다운로드 한 내 listview의 이미지가 있습니다. getView()에 무언가를 집어 넣어서 사용자가 날아 다니거나 빠르게 스크롤하는 경우 이미지를 다운로드하지 않겠습니까?사용자가 빠르게 스크롤하는 동안 내 목록 어댑터의보기로드를 지연시킬 수 있습니까?
어떻게 시작할 수 있습니까?
인터넷에서 다운로드 한 내 listview의 이미지가 있습니다. getView()에 무언가를 집어 넣어서 사용자가 날아 다니거나 빠르게 스크롤하는 경우 이미지를 다운로드하지 않겠습니까?사용자가 빠르게 스크롤하는 동안 내 목록 어댑터의보기로드를 지연시킬 수 있습니까?
어떻게 시작할 수 있습니까?
다음 단계를 수행하여 ListView의보기로드를 지연시킬 수 있습니다.
먼저, ListView
Object 및 YOUR_COSTOM_ADAPTER_OBJECT
클래스 변수를 만들어야합니다. 다음, 당신의 ListView에 대한 onScroll 리스너를 설정
당신의 ListView의 onScroll 리스너에서 스크롤 속도를 얻기 :
이 onScroll 리스너에서 스크롤 속도를 확인하고 속도가 빠른 얻을 때, 이미지를로드하지 어댑터를 말한다.
예제 코드 :
class YourClass extends Activity
{
YOUR_CUSTOM_LISTVIEW_ADAPTER adapter;
ListView YOUR_LISTVIEW;
ArrayList<YOUR_DATA_TYPE> listViewData;
onCreate(...){
.....
.....
//ListView data Initialization
listViewData = new ArrayList<YOUR_DATA_TYPE>();
listViewData.clear();
YOUR_LISTVIEW = (ListView)findViewById(R.id.YOUR_LISTVIEW_ID);
//adapter Initialization
adapter = new YOUR_CUSTOM_LISTVIEW_ADAPTER(....);
YOUR_LISTVIEW.setAdapter(adapter);
}
private OnScrollListener onScrollListener = new OnScrollListener() {
private int previousFirstVisibleItem = 0;
private long previousEventTime = 0;
private double speed = 0;
@Override
public void onScroll(HtcAbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{
if (previousFirstVisibleItem != firstVisibleItem)
{
long currTime = System.currentTimeMillis();
long timeToScrollOneElement = currTime - previousEventTime;
speed = ((double)1/timeToScrollOneElement)*1000;
previousFirstVisibleItem = firstVisibleItem;
previousEventTime = currTime;
Log.d("DBG", "Speed: " +speed + " elements/second");
//Tell adapter to not load images if it has reached a specific speed
if(speed>YOUR_DESIRED_VALUE)
{
doNotLoadImagesInListView();
}
else
{
loadImagesInListView();
}
}
}
@Override
public void onScrollStateChanged(HtcAbsListView view, int scrollState)
{
}
};
void doNotLoadImagesInListView()
{
adapter.isScrollFast = true;
adapter.notifyDataSetChanged();
YOUR_LISTVIEW.setAdapter(adapter);
}
void loadImagesInListView()
{
adapter.isScrollFast = false;
adapter.notifyDataSetChanged();
YOUR_LISTVIEW.setAdapter(adapter);
}
}
그에 따라 변화를 확인하기 위해 사용자 정의 목록 어댑터를 구성
public class yourCustomAdapter extends BaseAdapter
{
public Boolean isScrollFast;
public yourCustomAdapter(..... , ....., Boolean isScrollFast)
{
....
this.isScrollFast = isScrollFast;
.....
}
@Override
public int getCount()
{
.....
}
@Override
public Object getItem(int position)
{
.....
}
@Override
public long getItemId(int position)
{
.....
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
.......
if(isScrollFast==true)
{
//Don't Load Images
}
else
{
//Load Images normally
}
return vi;
}
}
나는이 당신을 위해 작동 바랍니다.
아래에서 답을 확인하셨습니까? –