在android开发中我们常常会在ListView中嵌套GridView图片显示,但效果总是不如人意,因为我们不能很好的控制gridView中图片尺寸显示的问题,接下来就让我来讲讲如何设置图片显示位置和尺寸的方法,让大家借鉴借鉴,直接上代码:
public class MainActivity extends Activity {
ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview=(ListView)findViewById(R.id.listview);
listview.setAdapter(new MyAdapter());
}
}
这里仿微信朋友圈的布局。相信大家都看的懂的。接下来看看MyAdapter的实现逻辑:
public class myAdapter extends BaseAdapter {
// final static Boolean mIsGridViewIdle;
private Context context;
private List
weibolist;
private LayoutInflater inflater;
//这里省略一些控件
...
ImageGridAdapter adapter;
public myAdapter(Context context,List
weibolist,int mScreenWidth,int mScreenHeight,String type){
this.context=context;
this.weibolist=weibolist;
this.inflater=LayoutInflater.from(context);
this.mScreenHeight=mScreenHeight;
this.mScreenWidth=mScreenWidth;
this.type=type;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return weibolist.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(final int position, View concertView, final ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder=null;
if(concertView==null){
concertView=inflater.inflate(R.layout.adapter_weibolist_item, parent, false);
holder=new ViewHolder();
holder.userIcon=(CircleImageView)concertView.findViewById(R.id.adapter_weibolist_head);
holder.txDescribe=(TextView)concertView.findViewById(R.id.adapter_weibolist_item_content);
holder.txUser=(TextView)concertView.findViewById(R.id.adapter_weibolist_item__name);
holder.txTime=(TextView)concertView.findViewById(R.id.adapter_weibolist_item_create_time);
holder.imageGrid=(GridView)concertView.findViewById(R.id.adapter_weibolist_item_imGrid);
holder.txNum=(TextView)concertView.findViewById(R.id.adapter_weibolist_item_comment_account);
holder.imageView=(ImageView)concertView.findViewById(R.id.adapter_weibolist_item_delete_weibo);
concertView.setTag(holder);
}else {
holder=(ViewHolder) concertView.getTag();
}
this.position=position;
holder.txTime.setText(weibolist.get(position).getCreatedAt());
holder.txDescribe.setText(weibolist.get(position).getContent());
holder.imageGrid.setVisibility(View.GONE);
//如果设置了图片GridView
if(weibolist.get(position).getIcons()!=null){
holder.imageGrid.setVisibility(View.VISIBLE);
holder.imageGrid.setClickable(false);
holder.imageGrid.setPressed(false);
holder.imageGrid.setEnabled(false);
adapter=new ImageGridAdapter(context, weibolist.get(position).getIcons(), mScreenWidth, mScreenHeight);
holder.imageGrid.setAdapter(adapter);
// GridViewUtils.updateGridViewLayoutParams(holder.imageGrid, 3);
}
return concertView;
}
真正实现逻辑的是ImageGridAdapter,接下来看看里面做了些什么事:
package lmf.zhumydemo.adapter;
import java.util.ArrayList;
import java.util.List;
import lmf.zhumydemo.activity.LostOrFoundActivity;
import com.bmob.BmobProFile;
import com.example.zhumydemo.R;
import com.nostra13.universalimageloader.core.ImageLoader;
import cn.bmob.v3.datatype.BmobFile;
import android.app.ActionBar.LayoutParams;
import android.content.Context;
import android.provider.MediaStore.Files;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class ImageGridAdapter extends BaseAdapter {
private Context context;
private LayoutInflater inflater;
private String[] fileNames;
private String[] urls;
private List
files=new ArrayList
();
private List
urlss=new ArrayList
();
private String url;
....
private int mScreenWidth;
private int mScreenHeight;
Boolean mIsGridViewIdle;
public ImageGridAdapter(Context context, List
icons,int mScreenWidth,int mScreenHeight) { // TODO Auto-generated constructor stub this.context=context; this.icons=icons; this.inflater=LayoutInflater.from(context); this.mScreenHeight=mScreenHeight; this.mScreenWidth=mScreenWidth; } @Override public int getCount() { // TODO Auto-generated method stub return icons.size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View concertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder holder=null; if(concertView==null){ concertView=inflater.inflate(R.layout.adapter_imagegrid_item, parent, false); holder=new ViewHolder(); holder.imageView=(ImageView)concertView.findViewById(R.id.adapter_imagegrid_imageview); concertView.setTag(holder); }else { holder=(ViewHolder) concertView.getTag(); } url=icons.get(position).getFileUrl(context); //首先得到要设置的GridView GridView gv=(GridView) parent; //获得每个Item之间的间隔 int horizontalSpacing=gv.getHorizontalSpacing(); //获得总共的列数 int numColums=gv.getNumColumns(); //每个Item的宽度 int itemWith=(gv.getWidth()-(numColums-1)*horizontalSpacing-gv.getPaddingLeft()-gv.getPaddingRight())/numColums; LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams(itemWith, itemWith); holder.imageView.setLayoutParams(lp); holder.imageView.setTag(url); if(holder.imageView.getTag()!=null&&holder.imageView.getTag().equals(url)){ ImageLoader.getInstance().displayImage(url, holder.imageView); } // bmobFile.loadImageThumbnail(context, holder.imageView, 30, 30); return concertView; } public class ViewHolder{ private ImageView imageView; } }