- 浏览: 11520 次
- 性别:
- 来自: 邯郸市
文章分类
最新评论
ListView显示图片(只有文字显得很傻),很多了,效果图就不找了,这里主要是网络图片,利用上节网络图片获取的类。
先定义了一个类,ModelList,主要是存放ListView Item中的一些信息,比如用户名、标题、内容、预览图片的网络链接等。新建的包model下:
ListView的Adapter,ListAdapter中:
获取图片的回掉监听器
附上获取设备屏幕大小的类tool/DeviceInfo
initDeviceInfo初始化函数在MainActivity的onCreate中调用即可,不贴了。
设置数据测试,在ListFragment中刷新回掉中
比较简单,刷新之后加入固定的数据(应该从网络上获取数据的,现在后台还没有写好),效果:
注:并没有长图加载、GIF播放的按钮
先定义了一个类,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
发表评论
-
20、长图的加载显示
2017-06-18 16:24 589有时候图片很长,预览只是其一部分,有个类似按钮 ... -
19、GIF动图显示
2017-06-18 16:28 833有时候需要显示动图,可安卓有没有现成的控件,很 ... -
17、网络图片加载
2017-06-17 20:57 440如上节,有时候需要显示网络图片,QListVi ... -
15、ListView Item设置
2017-06-17 20:52 508当然想要ListView显示自定义的布局,显示 ... -
16、后台异步处理
2017-06-17 20:56 665大多时候,需要后台(异步)去执行一些费时操作。 ... -
14、自定义ListView
2017-06-13 22:05 718实现了显示的效果,接着来实现一些监听器(接口) ... -
13、自定义ListView
2017-06-13 21:58 545下拉刷新,上拉加载,很流行的啊,总的来说有两种 ... -
12、Dp Notes内容-列表(ListView使用)
2017-06-12 22:48 503完成了一些空架子,开始填内容,从列表开始吧(主 ... -
11、Dp Notes顶部导航栏
2017-06-10 23:05 498完成了底部导航栏,再来顶部导航栏(叫什么?菜单 ... -
10、Dp Notes底部导航栏
2017-06-10 11:48 549有卡顿的现象(可能模拟器原因),滑动时没有渐变 ... -
9、Dp Notes底部导航栏
2017-06-10 11:41 548将ViewPager和QEndBar结合起来, ... -
8、Dp Notes底部导航栏
2017-06-07 21:59 644实现了点击切换效果(只是图标状态变化),如何结 ... -
7、Dp Notes底部导航栏
2017-06-07 21:58 570想要的图标呢?怎么弄上去。从网上找了几个图标, ... -
6、Dp Notes底部导航栏(自定义控件(View))
2017-06-05 21:40 626已经看到了安卓的一角,正式开始Dp Notes ... -
5、控件美化(drawable使用)
2017-06-04 11:19 663先前的回复页面虽然搭好了,功能也实现了,但页面 ... -
4、第一行代码
2017-06-03 09:12 656上节完成了回复功能的页面搭建,可是想要的功能并 ... -
3、基本控件
2017-06-03 09:01 545控件,很好 ... -
2、你好,世界
2017-06-01 20:23 491开发一个安 ... -
1、初衷
2017-05-31 21:18 390接触安卓已经有一段时间了,从一开始接触J2M ...
相关推荐
本篇文章将深入探讨如何对ListView显示图片进行优化,确保流畅的用户体验。 1. 使用高效的图片加载库:对于ListView中的图片加载,推荐使用像Glide、Picasso或 Fresco 这样的第三方库。这些库具有智能缓存机制,能...
在给定的场景中,"C#在ListView中Subitem显示图片"是一个关于在ASP.NET Web应用程序中使用ListView控件来展示数据时,如何在Subitems中添加图像的功能。 ListView控件是ASP.NET 2.0引入的一种高度可定制的数据绑定...
在我们的场景中,我们可能只需要一列来显示图片,而其他列可以用来显示图片的描述或者其他相关信息。 实现图片浏览的关键在于设置ListView的视图模式。默认情况下,ListView是文本模式,但我们可以将其设置为...
如果需要显示图片下载进度,可以使用`listener`接口: ```java Glide.with(context) .load(url) .listener(new RequestListener() { @Override public boolean onLoadFailed(@Nullable GlideException e, ...
为了在ListView中显示图片,我们需要借助额外的数据结构,如ImageList。ImageList是一个可以存储多张图片的容器,它可以被多个控件共享,比如ListView、TreeView等。在Android中,我们可以使用Adapter(如...
总之,"Listview显示网络图片"涉及到Android开发中的性能优化和用户体验设计。通过使用异步加载库如Glide,我们可以高效地在ListView中加载网络图片,同时保证应用的流畅性。同时,合理利用缓存和优化策略,可以...
这个项目“listview 添加图片效果显示,加文字搜索提示”显然关注于如何在ListView中实现图文混排以及添加搜索功能。以下将详细讲解这两个关键知识点。 1. **图文混排**: 在ListView中显示图文混排的内容,通常...
在实际应用中,我们经常需要在ListView的每个Item中显示图片。然而,如果直接加载网络或本地的大图,可能会导致性能问题,如界面卡顿,用户体验下降。这篇内容将深入探讨如何在ListView中高效地显示图片。 首先,...
本教程将详细讲解如何在ListView的LargeIcon模式下实现图片的居中显示,并提供两个示例以适应不同的项目需求。 首先,我们需要理解ListView的工作原理。ListView通过Adapter来绑定数据和视图,当数据源发生变化或...
本文将详细探讨如何在Winform的`ListView`控件中实现图片的缩略图显示。 首先,`ListView`控件有多种视图模式,其中“小图标”(SmallIcon)和“大图标”(LargeIcon)模式可以显示图像,但它们通常只能显示固定...
"Listview显示网络图片demo--真正简单好用"是一个针对这些问题的解决方案,它提供了一个优雅且高效的实现方式,保证了用户体验的流畅性。 首先,我们需要理解ListView的工作原理。ListView通过复用已创建的列表项来...
在 ListView 控件中显示图片时,我们需要使用 ImageView 控件来显示图片,并使用 Bitmap 来存储图片数据。在 SimpleAdapter 中,我们需要对 ImageView 进行处理,使得图片可以正确地显示出来。 知识点7:布局文件的...
综上所述,通过视图复用、异步加载、图片压缩、缓存策略、尺寸调整和使用高效的图片加载库等手段,我们可以有效地优化ListView显示大量图片的性能,使得即使在处理2000个资源的情况下,也能保持良好的用户体验。...
它主要通过ListView中加载指定文件夹中所有图片并通过双击缩略图显示具体图片,是比较基础的C#图片打开代码,但是对学习C#初级同学和研究ListVie控件的同学非常有帮助. 免费资源,仅供分享与大家学习,希望对大家有所...
从网络加载图片显示到listview上,主函数布局是一个ListView item布局是TextView和ImageView 数量的多少视情况而定 再写一个网络请求数据的类 最后面有代码: ”urlConnection 请求数据类的封装“ 类名一定要一样...
这个“C# ListView显示图像模式 源代码”就是针对这一需求的实现,提供了在ListView中以缩略图形式展示图像的功能。 ListView控件本身支持多种视图模式,如Details(详细信息)、SmallIcon(小图标)、LargeIcon...
# 一、Winform ListView 显示复杂控件示例 ## 方案一:ListView 结合组合框进行模拟编辑 基本思路 - 在界面上放置一个lisview和一个combobox,combobox平时是隐藏的。 - 点击listview,在点击位置的单元格上显示这...
通常,我们会使用ImageView作为显示图片的容器。 2. 图片加载库:考虑到性能和内存管理,推荐使用如Glide、Picasso或Fresco这样的图片加载库。这些库能高效地加载图片,并有缓存机制,避免内存溢出。例如,使用...
以上就是Android解析网络图片并显示在ListView中的主要知识点,这些技术和实践对于任何需要动态加载图片的Android应用来说都是至关重要的。在实际开发中,应根据项目需求和性能要求选择合适的方法和库。
比如,Universal Image Loader可以配置为根据ListView的position加载和显示图片,确保每个Item显示正确的图片。 4. **异步加载**:在主线程中加载图片会导致UI卡顿,因此应使用异步加载。大多数图片加载库都支持...