(1)基本方法:
链接1:点击打开链接
代码摘抄:
public View getView(int position, View convertView, ViewGroup parent) {
ImageView i = new ImageView(mContext);
i.setImageResource(mImageIds[position]);
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setLayoutParams(new Gallery.LayoutParams(136, 88));
// The preferred Gallery item background
i.setBackgroundResource(mGalleryItemBackground);
return i;
}
链接二:
BaseAdapter中重写getview的心得以及发现convertView回收的机制
public View getView(int position, View convertView, ViewGroup parent)
{
System.out.println("getView " + position + " " + convertView);//调试语句
Holder holder;
if(null==convertView)
{
holder=new Holder();
convertView=LayoutInflater.from(mContext).inflate(R.layout.textview, null); //mContext指的是调用的Activtty
holder.textView=(TextView)convertView.findViewById(R.id.textview);
convertView.setTag(holder);
}
else
{
holder=(Holder)convertView.getTag();
}
holder.textView.setText("position: "+position);
return convertView;
}
class Holder
{
public TextView textView;
}
(2)循环重用
链接:点击打开链接
代码摘抄:
public SmallGameVO[] featuredItems;
private SmallGameVO tempGame;
private View[] viewArray;
public FeaturedAdapter(Context c, SmallGameVO[] featuredGames) {
featuredItems = featuredGames;
viewArray = new View[featuredItems.length];
}
public int getCount() {
return featuredItems.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater linflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout tempView = null;
if(convertView != null){
NVDebug.log("re-using the convertView!");
tempView = convertView;
}else{
//no convertView, need to do the heavy lifting ourselves
//check our viewArray to see if we have a view at the position or we need to create a new one
if(viewArray[position] != null){
tempView = (LinearLayout) viewArray[i];
break;
} else {
tempView = (LinearLayout) linflater.inflate(R.layout.feature_gallery_capsule, null);
viewArray[position] = tempView;
break;
}
}
}
NVWebImageView img = (NVWebImageView) tempView.findViewById(R.id.galleryImage);
if(position <= featuredItems.length - 1){
tempGame = featuredItems[position];
if(img.imageUrl != tempGame.getFeaturedImage()){
img.setImageUrl(tempGame.getFeaturedImage());
img.loadImage();
}
}else{
tempView = new LinearLayout(parent.getContext());
}
return tempView;
}
(3)缓存
链接:点击打开链接
代码摘抄:
public View getView(int position, View convertView, ViewGroup parent) {
int arrPosition = position % VIEW_CHACHE_SIZE;
ImageView imageView;
mCursor.moveToPosition(position);
if (parent.getHeight() > 0 && layoutParams.height == 0) {
layoutParams = new Gallery.LayoutParams(parent.getWidth() / VISIBLE_IMAGES_COUNT, (int) (parent.getHeight() * IMAGE_HEIGHT_COEFICIENT));
viewsList[0].setLayoutParams(layoutParams);
}
if (convertView != null) {
Log.i("GALLERY", "convert view not null");
}
// check views cache
if (viewsList[arrPosition] == null) {
imageView = new ImageView(mContext);
imageView.setPadding(3, 3, 3, 3);
viewsList[arrPosition] = imageView;
} else {
imageView = viewsList[arrPosition];
if (position == arrPosition) {
if (imageView.getDrawable().equals(imagesList.get(position))) {
return imageView;
}
}
}
// check images cache
if (imagesList.get(position) != null) {
imageView.setImageDrawable(imagesList.get(position));
} else {
byte[] photo = mCursor.getBlob(mCursor.getColumnIndex(DataProxy.PHOTO_COLUMN));
imagesList.put(position, new BitmapDrawable(BitmapFactory.decodeByteArray(photo, 0, photo.length)));
imageView.setImageDrawable(imagesList.get(position));
}
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(layoutParams);
return imageView;
}
.........................................................
private SparseArray<Drawable> imagesList = new SparseArray<Drawable>();
private ImageView[] viewsList = new ImageView[VIEW_CHACHE_SIZE];
private Gallery.LayoutParams layoutParams = new LayoutParams(0, 0);
private static final int VIEW_CHACHE_SIZE = 4;
(4)自己最终解决方案
本文对链接 ZPhotoEngine图像算法引擎V3.0 给出android Demo进行扩展实现了给出的106种滤镜算法。
因为自己在Gallery中展示的是TextView,所以对方案三做了稍微的改动,(也许使用ListView会更方便,本人菜鸟,莫怪~)代码如下:
public View getView(int position, View convertView, ViewGroup parent){
int arrPosition = position % VIEW_CHANCHE_SIZE;
TextView textView;
if(viewlist[arrPosition] == null){
textView = new TextView(mContext);
textView.setTextColor(Color.RED);
textView.setBackgroundColor(Color.alpha(1));
textView.setLayoutParams(new Gallery.LayoutParams(400, 150));
viewlist[arrPosition] = textView;
}else{
textView = viewlist[arrPosition];
}
textView.setText(mFilterlist[position]);
return textView;
}
private TextView[] viewlist = new TextView[VIEW_CHANCHE_SIZE];
private static final int VIEW_CHANCHE_SIZE = 6;