Gallery重写baseadapter时getView函数中的view重用
来源:互联网 发布:淘宝反作弊部门情况 编辑:程序博客网 时间:2024/05/21 09:49
(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;
0 0
- Gallery重写baseadapter时getView函数中的view重用
- Android 重写BaseAdapter中的getView
- 重写BaseAdapter后getView的模版
- BaseAdapter,getView
- Android 重写BaseAdapter碰到getView中convertView出现错误
- BaseAdapter + Gallery
- Adapter.getView convertView(重用View) ViewHolder(避免findViewById)
- 在BaseAdapter中的GetView方法中的一些问题
- BaseAdapter中的getview以及convertView的回收机制
- ListView,GridView,Gallery的Adapter中的getView多次调
- Android-BaseAdapter中getView()
- android BaseAdapter getView 理解
- BaseAdapter getView方法
- android-BaseAdapter和getView
- getView 中的View为什么叫convertView ?
- BaseAdapter中重写getview的心得以及发现convertView回收的机制
- BaseAdapter中重写getview的心得以及convertView回收的机制
- BaseAdapter中重写getview的心得以及发现convertView回收的机制
- 4.0 第三十三章 XML
- mongodb mapreduce 参数的详细说明
- Android代码内存优化建议-Android资源篇
- this关键字及内存分配
- 蓝桥杯 - 出现次数最多的整数
- Gallery重写baseadapter时getView函数中的view重用
- Mavlink 协议硬解析主要代码
- Android之Camera
- hdu 2167(状态压缩dp)
- Android布局文件中的四种单位
- MPLAB X IDE和Proteus联调方法
- 安装mysql教程(出现Install/Remove of the Service Denied)
- Jmeter-录制手机的http请求
- C++利用智能指针shared_ptr实现对象池