(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;