Android 使用开源库载入网络图片
Android 使用开源库载入网络图片,使用开源库载入图片。单击listview弹出popupwindow弹出框详情查看:
Android 单击listview弹出popupwindow弹出框
,里面还附带listview右滑删除按钮详情查看:Android 使用NineOldAndroids实现仿微信listview左滑出现删除itembutton。项目就是这样慢慢变得复杂,是往里面逐渐加功能,效果,代码。
本文项目源代码下载地址:点击
一、看实现的效果
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
二、项目结构图
三、部分源代码
1、MyApplication继承了Application
package com.main.listviewsideslip; import java.io.File;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.cache.memory.impl.UsingFreqLimitedMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.utils.StorageUtils; import android.app.Application;
import android.content.Context; public class MyApplication extends Application{ public void onCreate() {
super.onCreate();
initImageLoader(getApplicationContext());
} public static void initImageLoader(Context context) {
//缓存文件的文件夹
File cacheDir = StorageUtils.getOwnCacheDirectory(context, "imageloader/Cache");
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.memoryCacheExtraOptions(480, 800) // max width, max height,即保存的每一个缓存文件的最大长宽
.threadPoolSize(3) //线程池内载入的数量
.threadPriority(Thread.NORM_PRIORITY - 2)
.denyCacheImageMultipleSizesInMemory()
.diskCacheFileNameGenerator(new Md5FileNameGenerator()) //将保存的时候的URI名称用MD5 加密
.memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache implementation/你能够通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值
.diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
.tasksProcessingOrder(QueueProcessingType.LIFO)
// 由原先的discCache -> diskCache
.diskCache(new UnlimitedDiskCache(cacheDir))//自己定义缓存路径
.imageDownloader(new BaseImageDownloader(context, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间
.writeDebugLogs() // Remove for release app
.build();
//全局初始化此配置
ImageLoader.getInstance().init(config);
}
}
2、适配器RecentAdapter里面相同设置着网络载入配置。
package com.listview.adapter; import java.util.LinkedList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.main.entity.RecentItem;
import com.main.listviewsideslip.Constants;
import com.main.listviewsideslip.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.view.listview.SwipeListView; public class RecentAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private LinkedList<RecentItem> mData;
private SwipeListView mListView;
private Context mContext;
private DisplayImageOptions mOptions; // 设置图片显示相关參数
public static String[] mImageUrls; // 图片路径
private ImageLoader mImageLoader; //网络图片载入类 public RecentAdapter(Context context, LinkedList<RecentItem> data,
SwipeListView listview) {
mContext = context;
this.mInflater = LayoutInflater.from(mContext);
mData = data;
this.mListView = listview;
mImageLoader = ImageLoader.getInstance();
initImageView();
} public void remove(int position) {
if (position < mData.size()) {
mData.remove(position);
notifyDataSetChanged();
}
} public void remove(RecentItem item) {
if (mData.contains(item)) {
mData.remove(item);
notifyDataSetChanged();
}
} public void addFirst(RecentItem item) {
if (mData.contains(item)) {
mData.remove(item);
}
mData.addFirst(item);
notifyDataSetChanged();
} @Override
public int getCount() {
return mData.size();
} @Override
public Object getItem(int position) {
return mData.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(final int position, View convertView, ViewGroup parent) {
final RecentItem item = mData.get(position);
ViewHolder vHolder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.recent_listview_item, null);
vHolder = new ViewHolder();
vHolder.nameTV = (TextView) convertView.findViewById(R.id.recent_list_item_name);
vHolder.numTV = (TextView) convertView.findViewById(R.id.unreadmsg);
vHolder.headIV = (ImageView) convertView.findViewById(R.id.icon);
vHolder.deleteBtn = (Button) convertView.findViewById(R.id.recent_del_btn); convertView.setTag(vHolder);
}else {
vHolder = (ViewHolder) convertView.getTag();
} vHolder.nameTV.setText(item.getName()); /**
* imageUrl 图片的Url地址 imageView 承载图片的ImageView控件 options
* DisplayImageOptions配置文件
*/
mImageLoader.displayImage(mImageUrls[position],
vHolder.headIV, mOptions); int num = item.getNewNum();
if (num > 0) {
vHolder.numTV.setVisibility(View.VISIBLE);
vHolder.numTV.setText(num + "");
} else {
vHolder.numTV.setVisibility(View.GONE);
} vHolder.deleteBtn.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
mData.remove(position);
notifyDataSetChanged();
if (mListView != null)
mListView.closeOpenedItems();
}
});
return convertView;
} class ViewHolder{
public TextView nameTV;
public TextView numTV;
public ImageView headIV;
public Button deleteBtn;
}
3、怎么调用,事实上都在上面那个适配器里面。也顺便看看MainActivity
package com.main.listviewsideslip; import java.util.Collections;
import java.util.LinkedList;
import com.listview.adapter.RecentAdapter;
import com.main.entity.RecentItem;
import com.view.listview.BaseSwipeListViewListener;
import com.view.listview.SwipeListView;
import com.view.pop.ActionItem;
import com.view.pop.QuickAction;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.app.Activity;
import android.content.Intent; public class MainActivity extends Activity{ //listview的适配器
private RecentAdapter mAdapter;
//listview数据源
public LinkedList<RecentItem> mRecentDatas;
//自己定义的listview
private SwipeListView mRecentListView;
private TextView mEmpty;
private int mClickItem = -1;
// 点击item弹出
protected QuickAction mItemClickQuickAction = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); initView(savedInstanceState); initPop();
} //单击listview某一项时,能够弹出pop。QuickAction实现类是继承PopupWindows
private void initPop() {
// 设置Action
mItemClickQuickAction = new QuickAction(this, QuickAction.VERTICAL); ActionItem pointItem = new ActionItem(1, "具体信息", null);
ActionItem areaItem = new ActionItem(2, "信息2", null);
pointItem.setIcon(null);
areaItem.setIcon(null); mItemClickQuickAction.addActionItem(pointItem);
mItemClickQuickAction.addActionItem(areaItem); mItemClickQuickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {
@Override
public void onItemClick(QuickAction source, int pos, int actionId) {
if (pos == 0) {
Intent intent = new Intent(source.GetActionItemsGroup().getContext(),ListViewItemShowActivity.class);
RecentItem item = new RecentItem();
item = mRecentDatas.get(mClickItem);
Bundle bundle = new Bundle();
// bundle.putString("HeadImg", mImageUrls[mClickItem]);
bundle.putInt("NewNum", item.getNewNum());
bundle.putString("Name", item.getName());
intent.putExtras(bundle);
startActivity(intent);
}
mItemClickQuickAction.dismiss();
}
});
} private void initView(Bundle savedInstanceState) {
mRecentListView = (SwipeListView) findViewById(R.id.recent_listview);
mRecentDatas = getRecentList();
mAdapter = new RecentAdapter(this, mRecentDatas, mRecentListView);
mRecentListView.setAdapter(mAdapter); mEmpty = (TextView) findViewById(R.id.empty);
mRecentListView.setEmptyView(mEmpty);
mRecentListView
.setSwipeListViewListener(new BaseSwipeListViewListener() { @Override
public void onClickFrontView(View view, int position) {
mClickItem = position;
mItemClickQuickAction.show(view);
} @Override
public void onClickBackView(int position) {
mRecentListView.closeOpenedItems();// 关闭打开的项
} @Override
public void onDismiss(int[] reverseSortedPositions) {
for (int position : reverseSortedPositions) {
mAdapter.remove(position);
} }
});
} public LinkedList<RecentItem> getRecentList() {
LinkedList<RecentItem> list = new LinkedList<RecentItem>();
nameArray = getResources().getStringArray(R.array.jazzy_effects_ch);
for (int i = 0; i < 20; i++) {
// int icon = heads[i];
String name = nameArray[i];
int num = numArray[i];
RecentItem item = new RecentItem(name, 0, num);
list.add(item);
}
Collections.sort(list);// 降序
return list;
} public static int[] numArray = { 21,67,65,8,54,67,23,78,98,54,67,23,67,423,23,67,90,12,34,56,978}; public static String[] nameArray = new String[21];
}
四、最后别忘了AndroidManifest.xml配置网络权限,以及application
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" /> <application
android:name="com.main.listviewsideslip.MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
本文相关文章:
1、Android 使用NineOldAndroids实现仿微信listview左滑出现删除itembutton
2、Android 单击listview弹出popupwindow弹出框
本文项目源代码下载地址:点击
Android 使用开源库载入网络图片的更多相关文章
- Android 第三方开源库收集整理(转)
原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样, ...
- 45.Android 第三方开源库收集整理(转)
原文地址:http://blog.csdn.net/caoyouxing/article/details/42418591 Android开源库 自己一直很喜欢Android开发,就如博客签名一样, ...
- Android SlidingMenu开源库及其使用
极客学院教程: http://www.jikexueyuan.com/course/61_5.html?ss=1 1. SlidingMenu开源库的配置 2. SlidingMenu 的使用 --- ...
- Android 使用开源库StickyGridHeaders来实现带sections和headers的GridView显示本地图片效果
大家好!过完年回来到现在差不多一个月没写文章了,一是觉得不知道写哪些方面的文章,没有好的题材来写,二是因为自己的一些私事给耽误了,所以过完年的第一篇文章到现在才发表出来,2014年我还是会继续在CSD ...
- android 使用开源库zxing生成二维码,扫描二维码【转】
转自:http://blog.csdn.net/qq_16064871/article/details/52422723 zxing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库 ...
- Android常用开源库集合【持续更新】
1.FastJson 阿里巴巴工程师做的一个方便的JSON转换库 2.ButterKnife 只要作用能代替代码中大量的findviewbyid语句的使用,使用@injectview注入方式 3.v ...
- 2019最新Android常用开源库总结(附带github链接)
前言 收集了一些比较常见的开源库,特此记录(已收录350+).另外,本文将持续更新,大家有关于Android 优秀的开源库,也可以在下面留言. 一 .基本控件 1.TextView HTextView ...
- Android 常用开源库总结(持续更新)
前言 收集了一些比较常见的开源库,特此记录(已收录350+).另外,本文将持续更新,大家有关于Android 优秀的开源库,也可以在下面留言. 一 .基本控件 TextView HTextView 一 ...
- Android 实用开源库(不定期更新)
ZXing 极其好用的二维码开源库. GayHub:https://github.com/zxing/zxing MPAndroidChart MPAndroidChart 是 Android 一个强 ...
随机推荐
- zabbix4.0 使用nginx前端安装
注:环境需求:centos7 1.安装阿里云yum源: rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.1/rhel/7/x86_64/zabb ...
- jumpserver 安装python 报错
环境centos7.5 pip3 insatll ./python-gssapi-0.6.4.tar.gz 报错 Command "python setup.py egg_info&quo ...
- TCP 三次握手,四次挥手
TCP 三次握手,四次挥手 1. TCP 三次握手 建立连接前,客户端和服务端需要通过握手来确认对方: 客户端发送 syn(同步序列编号) 请求,进入 syn_send 状态,等待确认 服务端接收并确 ...
- 洛谷 P1209 [USACO1.3]修理牛棚 Barn Repair
P1209 [USACO1.3]修理牛棚 Barn Repair 题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. ...
- C++11之decltype
使用场景 在C++中常常要用到非常长的变量名.假设已经有变量和你将使用的变量是一个类型.就可以使用decltypekeyword 来申明一样的类型变量. decltype原理 返回现有变量类 ...
- java 爬虫在 netbeans 里执行和单独执行结果不一样
在做内容測试的时候.发现我的爬虫(前些文章略有提及)在 netbeans 里面可以成功爬取网页内容,而单独执行时,给定一个 url,爬到的网页却与在浏览器里面打开 url 的网页全然不一样,这是一个非 ...
- Azure 配置高可用的准备系列工作-建立不同区域的存储账户和建立网络!
我们谈到我们的业务,常常谈到一个词.三层架构,就是我们的UI层.数据訪问层和数据存储层的分离,通常情况下我们的业务高可用必须满足这三层的所有高可用的情况下才干达到最高级别的高可用. 那么谈到Az ...
- 关于android studio几种常见的错误解决
我也是从ec转到as的,没办法,大势所趋嘛,然而,在使用as的过程中遇到了非常多匪夷所思的错误,如今就说一下今天我遇到的这个错误. 美工妹子给了我一张图片,用来当做button的背景图,当然,这个图也 ...
- 如何判断自己IP是内网IP还是外网IP
tcp/ip协议中,专门保留了三个IP地址区域作为私有地址,其地址范围如下: 10.0.0.0/8:10.0.0.0-10.255.255.255 172.16.0.0/12:172.16.0.0- ...
- HDU 5446 Unknown Treasure Lucas+中国剩余定理+按位乘
HDU 5446 Unknown Treasure 题意:求C(n, m) %(p[1] * p[2] ··· p[k]) 0< n,m < 1018 思路:这题基本上算是模版题了 ...