package com.banking.xc.utils.adapter.circulation; import android.view.View; import android.widget.Adapter; import android.widget.AdapterView; import com.banking.xc.utils.AdapterHelper; import com.banking.xc.utils.CirculationGalleryAdapter; import com.banking.xc.utils.Log; import com.banking.xc.utils.SimpleBeanAdapter; import com.banking.xc.utils.SimpleBeanAdapter.SubViewHolder; import com.banking.xc.utils.adapter.SimpleImageProcessor; import com.banking.xc.utils.adapter.UIRunnable; import com.banking.xc.utils.cache.GlobalImageCache.ImageState; public class CirculationSimpleImageProcessor extends SimpleImageProcessor { @Override protected UIRunnable provideUIRunnable(SubViewHolder subViewHolder, ImageState imageState) { return new CirculationUIRunnable(subViewHolder, imageState); } private class CirculationUIRunnable extends UIRunnable { public CirculationUIRunnable(SubViewHolder subViewHolder, ImageState imageState) { super(subViewHolder, imageState); } protected View getItemView() { if (Log.D) { Log.d(CirculationSimpleImageProcessor.class.getName(), "getItemView() -->> "); } SimpleBeanAdapter adapter = getSubViewHolder().getAdapter(); AdapterHelper adapterHelper = adapter.getAdapterHelper(); AdapterView<Adapter> adapterView = adapterHelper.getAdapterView(); if (Log.D) { Log.d(CirculationSimpleImageProcessor.class.getName(), "getItemView() adapter -->> " + adapter); } if (adapter instanceof CirculationGalleryAdapter) { CirculationGalleryAdapter a = (CirculationGalleryAdapter) adapter; if (Log.D) { Log.d(CirculationSimpleImageProcessor.class.getName(), "getSubViewHolder().getPosition() -->> " + getSubViewHolder().getPosition()); Log.d(CirculationSimpleImageProcessor.class.getName(), "a.getActualCount() -->> " + a.getActualCount()); } int firstVisiblePosition = adapterView.getFirstVisiblePosition() % a.getActualCount(); if (Log.D) { Log.d(CirculationSimpleImageProcessor.class.getName(), "getItemView() firstVisiblePosition -->> " + firstVisiblePosition); } int childCount = adapterView.getChildCount(); if (Log.D) { Log.d(CirculationSimpleImageProcessor.class.getName(), "getItemView() childCount -->> " + childCount); } int position = getSubViewHolder().getPosition(); // 当前要处理的position处于无限循环的临界点时,有可能小于firstVisiblePosition但依然属于显示范围 // 所以做如下处理 if(position < firstVisiblePosition){ position += a.getActualCount(); } Integer index = AdapterHelper.getItemViewIndex(firstVisiblePosition, childCount, position); if (Log.D) { Log.d(CirculationSimpleImageProcessor.class.getName(), "getItemView() index -->> " + index); } if (null != index) { return adapterView.getChildAt(index); } } return null; } } }