`
zdphpn
  • 浏览: 11441 次
  • 性别: 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
分享到:
评论

相关推荐

    Listview显示图片优化

    本篇文章将深入探讨如何对ListView显示图片进行优化,确保流畅的用户体验。 1. 使用高效的图片加载库:对于ListView中的图片加载,推荐使用像Glide、Picasso或 Fresco 这样的第三方库。这些库具有智能缓存机制,能...

    C#在ListView中Subitem显示图片

    在给定的场景中,"C#在ListView中Subitem显示图片"是一个关于在ASP.NET Web应用程序中使用ListView控件来展示数据时,如何在Subitems中添加图像的功能。 ListView控件是ASP.NET 2.0引入的一种高度可定制的数据绑定...

    c# winform ListView实现图片浏览

    在我们的场景中,我们可能只需要一列来显示图片,而其他列可以用来显示图片的描述或者其他相关信息。 实现图片浏览的关键在于设置ListView的视图模式。默认情况下,ListView是文本模式,但我们可以将其设置为...

    listView显示网络图片

    如果需要显示图片下载进度,可以使用`listener`接口: ```java Glide.with(context) .load(url) .listener(new RequestListener() { @Override public boolean onLoadFailed(@Nullable GlideException e, ...

    Listview显示网络图片

    总之,"Listview显示网络图片"涉及到Android开发中的性能优化和用户体验设计。通过使用异步加载库如Glide,我们可以高效地在ListView中加载网络图片,同时保证应用的流畅性。同时,合理利用缓存和优化策略,可以...

    listview 添加图片效果显示,加文字搜索提示

    这个项目“listview 添加图片效果显示,加文字搜索提示”显然关注于如何在ListView中实现图文混排以及添加搜索功能。以下将详细讲解这两个关键知识点。 1. **图文混排**: 在ListView中显示图文混排的内容,通常...

    listView显示图片

    在实际应用中,我们经常需要在ListView的每个Item中显示图片。然而,如果直接加载网络或本地的大图,可能会导致性能问题,如界面卡顿,用户体验下降。这篇内容将深入探讨如何在ListView中高效地显示图片。 首先,...

    listview-图片居中显示

    本教程将详细讲解如何在ListView的LargeIcon模式下实现图片的居中显示,并提供两个示例以适应不同的项目需求。 首先,我们需要理解ListView的工作原理。ListView通过Adapter来绑定数据和视图,当数据源发生变化或...

    Listview显示缩略图

    本文将详细探讨如何在Winform的`ListView`控件中实现图片的缩略图显示。 首先,`ListView`控件有多种视图模式,其中“小图标”(SmallIcon)和“大图标”(LargeIcon)模式可以显示图像,但它们通常只能显示固定...

    listview加载多幅图片

    为了在ListView中显示图片,我们需要借助额外的数据结构,如ImageList。ImageList是一个可以存储多张图片的容器,它可以被多个控件共享,比如ListView、TreeView等。在Android中,我们可以使用Adapter(如...

    Listview显示网络图片demo--真正简单好用

    "Listview显示网络图片demo--真正简单好用"是一个针对这些问题的解决方案,它提供了一个优雅且高效的实现方式,保证了用户体验的流畅性。 首先,我们需要理解ListView的工作原理。ListView通过复用已创建的列表项来...

    Android ListView控件显示数据库中图片

    在 ListView 控件中显示图片时,我们需要使用 ImageView 控件来显示图片,并使用 Bitmap 来存储图片数据。在 SimpleAdapter 中,我们需要对 ImageView 进行处理,使得图片可以正确地显示出来。 知识点7:布局文件的...

    ListView显示大量图片时的性能优化

    综上所述,通过视图复用、异步加载、图片压缩、缓存策略、尺寸调整和使用高效的图片加载库等手段,我们可以有效地优化ListView显示大量图片的性能,使得即使在处理2000个资源的情况下,也能保持良好的用户体验。...

    C# 使用ListView控件实现图片浏览器(源代码)

    它主要通过ListView中加载指定文件夹中所有图片并通过双击缩略图显示具体图片,是比较基础的C#图片打开代码,但是对学习C#初级同学和研究ListVie控件的同学非常有帮助. 免费资源,仅供分享与大家学习,希望对大家有所...

    Android ListView从网络获取图片及文字显示

    从网络加载图片显示到listview上,主函数布局是一个ListView item布局是TextView和ImageView 数量的多少视情况而定 再写一个网络请求数据的类 最后面有代码: ”urlConnection 请求数据类的封装“ 类名一定要一样...

    C# ListView显示图像模式 源代码

    这个“C# ListView显示图像模式 源代码”就是针对这一需求的实现,提供了在ListView中以缩略图形式展示图像的功能。 ListView控件本身支持多种视图模式,如Details(详细信息)、SmallIcon(小图标)、LargeIcon...

    WinForm ListView 添加图片、布尔、组合框、数字框等复杂控件

    # 一、Winform ListView 显示复杂控件示例 ## 方案一:ListView 结合组合框进行模拟编辑 基本思路 - 在界面上放置一个lisview和一个combobox,combobox平时是隐藏的。 - 点击listview,在点击位置的单元格上显示这...

    listview中显示真彩色的图片

    通常,我们会使用ImageView作为显示图片的容器。 2. 图片加载库:考虑到性能和内存管理,推荐使用如Glide、Picasso或Fresco这样的图片加载库。这些库能高效地加载图片,并有缓存机制,避免内存溢出。例如,使用...

    android解析网络图片并显示在listview

    以上就是Android解析网络图片并显示在ListView中的主要知识点,这些技术和实践对于任何需要动态加载图片的Android应用来说都是至关重要的。在实际开发中,应根据项目需求和性能要求选择合适的方法和库。

    ListView解决图片混乱

    比如,Universal Image Loader可以配置为根据ListView的position加载和显示图片,确保每个Item显示正确的图片。 4. **异步加载**:在主线程中加载图片会导致UI卡顿,因此应使用异步加载。大多数图片加载库都支持...

Global site tag (gtag.js) - Google Analytics