`
zdphpn
  • 浏览: 10492 次
  • 性别: Icon_minigender_1
  • 来自: 邯郸市
社区版块
存档分类
最新评论
阅读更多
        ListView显示图片(只有文字显得很傻),很多了,效果图就不找了,这里主要是网络图片,利用上节网络图片获取的类。
        先定义了一个类,ModelList,主要是存放ListView Item中的一些信息,比如用户名、标题、内容、预览图片的网络链接等。新建的包model下:

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;	//阅读次数
}

        ListView的Adapter,ListAdapter中:
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;
}

        获取图片的回掉监听器
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);
			}
		}
	}
};

        附上获取设备屏幕大小的类tool/DeviceInfo
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;
	}
}

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

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");//一个自定义网络类,获取百度首页数据
	}
};

        比较简单,刷新之后加入固定的数据(应该从网络上获取数据的,现在后台还没有写好),效果:

注:并没有长图加载、GIF播放的按钮

不要迷茫——2017/06/07






  • 大小: 1.1 MB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics