18、ListView显示图片

[size=medium] ListView显示图片(只有文字显得很傻),很多了,效果图就不找了,这里主要是网络图片,利用上节网络图片获取的类。
先定义了一个类,ModelList,主要是存放ListView Item中的一些信息,比如用户名、标题、内容、预览图片的网络链接等。新建的包model下:[/size]

public class ModelList {
public String type; //数据类型,先忽略

public String icon; //头像链接
public String name; //用户名
public String time; //时间

public String title; //标题
public String data; //内容

public String preurl; //预览图片链接
public int width; //宽
public int height; //高
public String dataurl; //数据链接,先忽略

public String read; //阅读次数
}

[size=medium] ListView的Adapter,ListAdapter中:[/size]

public class ListAdapter extends BaseAdapter {

private Activity activity; //之前有定义,获取布局时用
private List<ModelList> datas; //一个列表,存放Item数据

private ImageLoad imgload; //网络图片加载
private LmageLoad lmgload; //忽略
private GifLoad gifload; //忽略

private int itemwidth; //Item的宽度,保证图片横向铺满

public ListAdapter(Activity activity,QListView listview){
this.activity=activity; //构造传进来一个Activity

itemwidth=(int)(DeviceInfo.width-activity.getResources().getDimension(R.dimen.padding_s)*2);

imgload=new ImageLoad(activity);
lmgload=new LmageLoad(activity);
gifload=new GifLoad(activity);

datas=new ArrayList<ModelList>();
//传进来一个ListView,想不出其他好的办法,先忽略
listview.setQRecyclerListener(rclistener);
}
//自己添加 一个函数,用于设定数据
public void setData(List<ModelList> datas){
this.datas=datas;
this.notifyDataSetChanged();//数据更新
}
//自己添加 一个函数,用于添加数据
public void addData(List<ModelList> datas){
this.datas.addAll(datas);
this.notifyDataSetChanged();
}
//自己添加 一个函数,用于添加数据
public void addData(ModelList data){
this.datas.add(data);
this.notifyDataSetChanged();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return datas.size();//返回datas的大小
}

}
getView中:
public View getView(final int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final Holder holder;

if(convertView==null){
convertView=activity.getLayoutInflater().inflate(
R.layout.item_list, parent, false);

holder=new Holder();
convertView.setTag(holder);
}
else{
holder=(Holder)convertView.getTag();
}
//获取控件 holder.iv_icon=(ImageView)convertView.findViewById(R.id.iv_icon);
holder.tv_name=(TextView)convertView.findViewById(R.id.tv_name);
holder.tv_time=(TextView)convertView.findViewById(R.id.tv_time);
holder.tv_title=(TextView)convertView.findViewById(R.id.tv_title);
holder.tv_data=(TextView)convertView.findViewById(R.id.tv_data);
holder.rl_data=(RelativeLayout)convertView.findViewById(R.id.rl_data);
holder.tv_read=(TextView)convertView.findViewById(R.id.tv_read);
//根据当前位置获取数据
final ModelList data=datas.get(position); //获取Item数据
//父类和TAG在获取图片的时候要用
final View viewparent=convertView;
final int tagpre=position+1;
final int tagdata=-(position+1);

final int tagctrllmg=tagpre-1;//=position
final int tagctrlgif=tagdata+1;//=position

final int tagloadlmg=tagpre+1;//=position+2
final int tagloadgif=tagdata-1;//-(position+2)
//设置相应内容
holder.tv_name.setText(data.name);
holder.tv_time.setText(data.time);
holder.tv_title.setText(data.title);
if(data.data!=null){//有,设置显示
holder.tv_data.setText(data.data);
holder.tv_data.setVisibility(View.VISIBLE);
}
else{//无,隐藏
holder.tv_data.setVisibility(View.GONE);
}
if("txt".equals(data.type)){//仅有文字,隐藏下面的布局
holder.rl_data.setVisibility(View.GONE);
}
else if("lmg".equals(data.type)){//长图
LayoutParams lp=holder.rl_data.getLayoutParams();
lp.height=itemwidth*data.height/data.width;
holder.rl_data.setLayoutParams(lp);//设置高度,防止图片变形
holder.rl_data.setTag(tagpre);
Drawable pre=imgload.loadImage(viewparent,tagpre,data.preurl,ilcallback);
holder.rl_data.setBackground(pre);
holder.rl_data.setVisibility(View.VISIBLE);
//获取并设置图片
}
else{
LayoutParams lp=holder.rl_data.getLayoutParams();
lp.height=itemwidth*data.height/data.width;
holder.rl_data.setLayoutParams(lp);

holder.rl_data.setTag(tagpre);
Drawable pre=imgload.loadImage(viewparent,tagpre,data.preurl,ilcallback);
holder.rl_data.setBackground(pre);
holder.rl_data.setVisibility(View.VISIBLE);
//获取并设置图片,不用怀疑,和上面的一样
if("gif".equals(data.type)){

}
else if("vdo".equals(data.type)){

}

}

holder.tv_read.setText(data.read);

return convertView;
}

[size=medium] 获取图片的回掉监听器[/size]

private ImageLoadCallback ilcallback=new ImageLoadCallback() {

@SuppressLint("NewApi")
@Override
public void onSuccess(Drawable drawable, int tag, View viewParent) {
// TODO Auto-generated method stub
if(drawable!=null){
RelativeLayout rl_data=(RelativeLayout)(viewParent.findViewWithTag(tag));
if(rl_data!=null){
LayoutParams lp=rl_data.getLayoutParams();
lp.height=itemwidth*drawable.getMinimum
Height()/drawable.getMinimumWidth();
rl_data.setLayoutParams(lp);
rl_data.setBackground(drawable);
}
}
}
};

[size=medium] 附上获取设备屏幕大小的类tool/DeviceInfo[/size]

public class DeviceInfo {

public static int width;
public static int height;

public static void initDeviceInfo(Activity activity){
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().
getMetrics(metrics);
width=metrics.widthPixels;
height=metrics.heightPixels;
}
}

[size=medium] initDeviceInfo初始化函数在MainActivity的onCreate中调用即可,不贴了。
设置数据测试,在ListFragment中刷新回掉中[/size]

private BGTaskListener bgtlistener=new BGTaskListener() {

@Override
public void taskFinish() {
// TODO Auto-generated method stub
System.out.println(rcvdata);
if(rcvdata!=null){
ModelList data=new ModelList();
data.type="gif";
data.name="img";
data.time="2017";
data.title="标题例子,大小如何。";
data.data="内容例子,大小如何。内容例子,大小如何。内容例子,大小如何。";
data.width=683;
data.height=1024;
data.preurl="http://pic17.nipic.com/
20111025/910362_220203957000_2.jpg";
data.dataurl="http://i2.img.969g.com/pub/imgx2016/
09/01/284_171350_425dc_lit.gif";
data.read="2K阅读 • 54回复 • 原创";
adapter.addData(data);

ModelList data1=new ModelList();
data1.type="lmg";
data1.name="img";
data1.time="2017";
data1.title="标题例子,大小如何。";
data1.data="内容例子,大小如何。内容例子,大小如何。内容例子,大小如何。";
data1.width=683;
data1.height=1024;
data1.preurl="http://pic4.nipic.com/
20091119/1951702_070512038271_2.jpg";
data1.dataurl="http://pic17.nipic.com/
20111025/910362_220203957000_2.jpg";
data1.read="2K阅读 • 54回复 • 原创";
adapter.addData(data1);

}
qlv_list.completeRefresh(QListView.ISSUCCESS);//完成刷新
}

@Override
public void taskDoing() {
// TODO Auto-generated method stub
rcvdata=Http.read("http://www.baidu.com");//一个自定义网络类,获取百度首页数据
}
};

[size=medium] 比较简单,刷新之后加入固定的数据(应该从网络上获取数据的,现在后台还没有写好),效果:[/size]
[img]http://dl2.iteye.com/upload/attachment/0125/3348/b9606138-bc1c-3235-940d-6cfaae96374f.gif[/img]
[color=gray][size=medium]注:并没有长图加载、GIF播放的按钮[/size][/color]

[align=right][size=medium]不要迷茫——2017/06/07[/size][/align]
要在Android ListView显示图片,您可以使用自定义适配器来实现。以下是一个简单的示例: 1. 首先,在ListView布局文件中添加一个ImageView。 2. 在自定义适配器中,使用getView方法来设置每个列表项的布局和内容。在这个方法中,您可以使用setImageResource或setImageBitmap方法将图片设置为ImageView。 3. 在您的Activity中,将适配器设置为ListView的适配器。 以下是一个简单的示例代码: 首先,布局文件中添加ImageView: ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> ``` 然后,在适配器中设置布局和内容: ``` public class MyAdapter extends ArrayAdapter<String> { private final Context context; private final String[] values; private final int[] images; public MyAdapter(Context context, String[] values, int[] images) { super(context, R.layout.list_item, values); this.context = context; this.values = values; this.images = images; } @Override public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View rowView = inflater.inflate(R.layout.list_item, parent, false); TextView textView = (TextView) rowView.findViewById(R.id.label); ImageView imageView = (ImageView) rowView.findViewById(R.id.icon); textView.setText(values[position]); imageView.setImageResource(images[position]); return rowView; } } ``` 最后,在Activity中将适配器设置为ListView的适配器: ``` ListView listView = (ListView) findViewById(R.id.listview); String[] values = new String[] { "Item 1", "Item 2", "Item 3" }; int[] images = new int[] { R.drawable.image1, R.drawable.image2, R.drawable.image3 }; MyAdapter adapter = new MyAdapter(this, values, images); listView.setAdapter(adapter); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值