在android中用NetworkImageView读取网络图片并通过ListView显示出来
来源:互联网 发布:淘宝买家钻号 编辑:程序博客网 时间:2024/05/28 01:35
注:Volley库的NetworkImageView怎么用,网上有很多资料,这里只是记述我在项目中使用NetworkImageView读取网络图片然后通过ListView显示出来的做法和步骤(由于是截取删减项目代码,可能会有遗漏的地方),以备我以后查用(能帮助其他人将是我的荣幸),因为我也是在同学的帮助以及查询网络下完成的。
0、引用Volley库
1、布局文件
主页面布局xml中的ListView控件
<ListView android:id="@+id/lv_typelist" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@null" android:scrollbars="none"/>显示图片加文字的模板xml文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <LinearLayout android:layout_width="80dp" android:layout_height="100dp"> <com.android.volley.toolbox.NetworkImageView android:id="@+id/imageview_typeImg" android:layout_width="match_parent" android:layout_height="80dp" android:scaleType="centerCrop" android:layout_gravity="center" android:gravity="center"> </com.android.volley.toolbox.NetworkImageView> <TextView android:id="@+id/textview_typeName" android:layout_width="match_parent" android:layout_height="20dp" android:layout_gravity="center" android:gravity="center"/> </LinearLayout></LinearLayout>
用NetworkImageView替代安卓自身的ImageView控件。
2、创建自定义的Application,用来获取Volley的队列对象
public class MyApplication extends Application { public static RequestQueue queue; @Override public void onCreate() { super.onCreate(); queue = Volley.newRequestQueue(getApplicationContext()); } public static RequestQueue getHttpQueue() { return queue; }}
修改AndroidManifest.xml文件android:name=".MyApplication
如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.user.myfirstapp"> <uses-permission android:name="android.permission.INTERNET"/> <application android:name=".MyApplication" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppBaseTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
import android.graphics.Bitmap;import android.support.v4.util.LruCache;import com.android.volley.toolbox.ImageLoader;public class BitmapCache implements ImageLoader.ImageCache { //内存缓存 private static LruCache<String, Bitmap> mMemoryCache; //单例 private static BitmapCache lruImageCache; private BitmapCache(){ // Get the Max available memory int maxMemory = (int) Runtime.getRuntime().maxMemory(); int cacheSize = maxMemory/10; mMemoryCache = new LruCache<String, Bitmap>(cacheSize){ @Override protected int sizeOf(String key, Bitmap bitmap){ return bitmap.getRowBytes() * bitmap.getHeight(); } }; } //获取单例实例 public static BitmapCache instance(){ if(lruImageCache == null){ lruImageCache = new BitmapCache(); } return lruImageCache; } //从内存获取图片 @Override public Bitmap getBitmap(String url){ return mMemoryCache.get(url); } //图片放入到内存 @Override public void putBitmap(String url, Bitmap bitmap){ if(getBitmap(url) == null){ mMemoryCache.put(url, bitmap); } }}
4、Activity或Fragment中代码(我这里是在Fragment中)
private View view; private ListView lv_type; private TextView typename; private ImageView right_top_img; private Gson gson; private List<GoodsType> list; private ArrayList<HashMap<String, Object>> listItem; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view =inflater.inflate(R.layout.flg_type,container,false); lv_type=(ListView)view.findViewById(R.id.lv_typelist); ....此处省略一些代码.... showImageList(); ....此处省略一些代码.... return view; } private void showImageList(){ if(list!=null&&list.size()>0) { NetworkImageViewAdapter adapter = new NetworkImageViewAdapter(getActivity()); lv_type.setAdapter(adapter); //点击事件 lv_type.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if(id==-1) return; int realPosition=(int)id; ListView lv = (ListView)ListView; Object object=lv.getItemAtPosition(realPosition); //转对应的自定义的实体类型 GoodsType gt = (GoodsType)object; //分类id int typeId = gt.getId(); ......... } } } public class NetworkImageViewAdapter extends BaseAdapter { private LayoutInflater layoutInflater = null; class ViewHolder { TextView name; NetworkImageView image; } public NetworkImageViewAdapter(Context context) { layoutInflater = LayoutInflater.from(context); } @Override public int getCount() { return list == null ? 0 : list.size(); } @Override public Object getItem(int position) { return list == null ? null : list.get(position); } @Override public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { viewHolder = new ViewHolder(); convertView = layoutInflater.inflate(R.layout.twoleveltypelist_item, null); viewHolder.name = (TextView) convertView.findViewById(R.id.textview_typeName); viewHolder.image = (NetworkImageView) convertView.findViewById(R.id.imageview_typeImg); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } GoodsType gt = list.get(position); viewHolder.name.setText(gt.getTypeName()); ImageLoader imageLoader = new ImageLoader(MyApplication.getHttpQueue(), BitmapCache.instance()); viewHolder.image.setTag("url"); viewHolder.image.setImageUrl(gt.getTypeImg(), imageLoader); return convertView; } }
上面代码中的list是通过volley获取服务器的json对象发序列化得到的集合,GoodsType是一个实体对象,list就是GoodsType实体的集合,gt.getTypeName()获取的商品类型的名称,gt.getTypeImg()获取的商品类型的图片url。
5、效果图如下:
0 0
- 在android中用NetworkImageView读取网络图片并通过ListView显示出来
- Android中通过Picasso来加载网络图片,并通过ListView显示出来。
- 在安卓中读取并显示网络图片
- android从服务器端读取图片和数据混合流并显示在listview
- 读取图片,并通过鼠标交互,在图片上选择一块矩形区域,然后把这个矩形区域的子图像显示出来
- ASP.NET读取网络图片并在页面上显示
- ASP.NET读取网络图片并在页面上显示
- Android 通过url获取网络图片并显示在ImageView中
- 在webstorm中用代码将图片随机显示出来
- Android通过网络URL获取图片并显示
- 在QT集成开发环境中用OpenCV读取一张图片并显示
- android ListView显示网络图片
- android ListView显示网络图片
- Android中用BaseAdapter实现带Button和显示网络图片的Listview
- MFC 通过opencv 读取并显示图片
- Android基础篇之在ListView中显示网络图片
- Android基础篇之在ListView中显示网络图片
- ADO 从ACCESS数据库读取图片并显示出来
- 密码切换显示和隐藏 并且保证切换时候EditText显示在最后一行
- android采用Chrome Intent方式实现从浏览器启动应用
- JavaScript 中的变量和函数提升
- 《疯狂Java讲义(第3版)》.(李刚)——面向对象(上)
- 【转载】python获取文件及文件夹大小
- 在android中用NetworkImageView读取网络图片并通过ListView显示出来
- 剑指offer|从尾到头打印链表
- IOS NetworkExtension 框架使用笔记
- Android入门--Intent数据传递
- 影响蓝牙BLE设备功耗的几个因素
- 【刷题之路】有序数组组合问题
- LightOJ 1197 Help Hanzo(区间素数筛选)
- c 4.5 k-means 算法 机器学习
- Kylin, Mondrian, Saiku系统的整合