[size=medium] ListView显示图片(只有文字显得很傻),很多了,效果图就不找了,这里主要是网络图片,利用上节网络图片获取的类。
先定义了一个类,ModelList,主要是存放ListView Item中的一些信息,比如用户名、标题、内容、预览图片的网络链接等。新建的包model下:[/size]
[size=medium] ListView的Adapter,ListAdapter中:[/size]
[size=medium] 获取图片的回掉监听器[/size]
[size=medium] 附上获取设备屏幕大小的类tool/DeviceInfo[/size]
[size=medium] initDeviceInfo初始化函数在MainActivity的onCreate中调用即可,不贴了。
设置数据测试,在ListFragment中刷新回掉中[/size]
[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]
先定义了一个类,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]