- 浏览: 996884 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
自己811005:
3e0cb37da14117f477ff4f2f94c729e ...
sql基础_Case_特殊函数_异常_脏读 -
elton_john007:
我用 Thread.currentThread().getId ...
android系统内存不足时,应用被系统回收发生了什么? -
lwbao28:
wl8269961 写道设置方法:window-->pr ...
android ctrl + 左键(鼠标左键)直接打开xml文件 -
androidwifi:
sendMessageDelayed 不能实现循环, 看看这个 ...
android 三种定时器的写法 -
zy19891111:
回答得无比的赞
android系统内存不足时,应用被系统回收发生了什么?
附件为eclipse项目,导入既可运行
主要代码:
主要代码:
类1: public class InternetGalleryActivity extends Activity implements OnClickListener, OnFocusChangeListener { private Gallery myGallery; InternetGalleryAdapter adapter; Button bt, bt2; // 只需要关心传入的图片地址 private String[] imageURL = new String[] { "http://www.baidu.com/img/baidu_sylogo1.gif", "http://misc.360buyimg.com/lib/img/e/logo.png", "http://10.20.30.53:80/pic/cjk.jpg", "http://10.20.30.53:80/pic/cjk2.jpg", "http://img3.cache.netease.com/www/logo/logo_png.png", }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); bt = (Button) findViewById(R.id.main_bt); bt.setOnClickListener(this); bt2 = (Button) findViewById(R.id.main_bt2); bt2.setOnClickListener(this); myGallery = (Gallery) findViewById(R.id.main_gallery); adapter = new InternetGalleryAdapter(this, imageURL); myGallery.setAdapter(adapter); // 当焦点发生改变时加载后面的图片 myGallery.setOnFocusChangeListener(this); } /** * 刷新相簿 */ public void updateGallery() { if (null != adapter) { Log.d("lg", "notifyDataSetChanged"); adapter.notifyDataSetChanged(); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.main_bt: updateGallery(); break; case R.id.main_bt2: // 异步listView加载 Intent intent = new Intent(); intent.setClass(this, ListViewLoadActivity.class); startActivity(intent); break; } } @Override public void onFocusChange(View v, boolean hasFocus) { } @Override protected void onDestroy() { super.onDestroy(); } } adapter: public class InternetGalleryAdapter extends BaseAdapter { private Context context; private String[] imageURL; // private int mGalleryItemBackground; private Bitmap[] Bitmaps; public InternetGalleryAdapter(Context c, String[] imageURL) { Log.d("lg", "InternetGalleryAdapter"); this.context = c; this.imageURL = imageURL; Bitmaps = new Bitmap[imageURL.length]; for (int i = 0; i < imageURL.length; i++) { Resources res = context.getResources(); Bitmaps[i] = BitmapFactory.decodeResource(res, R.drawable.ic_launcher); } // TypedArray a = c.obtainStyledAttributes(R.styleable.Gallery); /* 取得Gallery属性的Index id */ // mGalleryItemBackground = // a.getResourceId(R.styleable.Gallery_android_galleryItemBackground, // 0); // 让对象的styleable属性能够反复使用 // a.recycle(); PicLoadTask picLoadTask = new PicLoadTask(); picLoadTask.execute(); } @Override public int getCount() { return imageURL.length; } @Override public Object getItem(int position) { return Bitmaps[position]; } @Override public long getItemId(int position) { return position; } public float getScale(boolean focused, int offset) { return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset))); } @Override public View getView(int position, View convertView, ViewGroup parent) { Log.d("lg", "getView"); ImageView imageView = new ImageView(context); imageView.setImageBitmap(Bitmaps[position]); imageView.setScaleType(ImageView.ScaleType.FIT_XY); imageView.setLayoutParams(new Gallery.LayoutParams(100, LayoutParams.FILL_PARENT)); imageView.setPadding(0, 0, 0, 0); // imageView.setBackgroundResource(mGalleryItemBackground); return imageView; } // 很费时的io操作,用异步线程处理 class PicLoadTask extends AsyncTask<String, Integer, String> { // String... 可变长的输入参数,与AsyncTask.exucute()对应 protected String doInBackground(String... params) { // 这里采用一次性全部记载的方法,适合少量图片 for (int i = 0; i < imageURL.length; i++) { try { // 从网络获取图片 URL aryURI = new URL(imageURL[i]); URLConnection conn = aryURI.openConnection(); conn.connect(); InputStream is = conn.getInputStream(); Bitmap bm = BitmapFactory.decodeStream(is); Bitmaps[i] = bm; cwjHandler.post(mUpdateResults); // 发布消息让主线程接收,实现异步线程和主线程的通信 // notifyDataSetChanged(); //不能直接调用ui操作,这样不是线程安全的 is.close(); Thread.sleep(1000); // 模拟延时 } catch (Exception e) { // 处理异常,图片加载失败 Log.d("lg", e + ""); } } return null; } } final Handler cwjHandler = new Handler(); final Runnable mUpdateResults = new Runnable() { public void run() { notifyDataSetChanged(); // 不能直接在AsyncTask中调用,因为不是线程安全的 } }; } 类2:listViewLoad public class ListViewLoadActivity extends ListActivity implements OnScrollListener { private LinearLayout mLoadLayout; private ListView mListView; private ListViewAdapter mListViewAdapter = new ListViewAdapter(); private int mLastItem = 0; private int mCount = 41; private final Handler mHandler = new Handler(); private final LayoutParams mProgressBarLayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); private final LayoutParams mTipContentLayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /** * "加载项"布局,此布局被添加到ListView的Footer中。 */ mLoadLayout = new LinearLayout(this); mLoadLayout.setMinimumHeight(60); mLoadLayout.setGravity(Gravity.CENTER); mLoadLayout.setOrientation(LinearLayout.HORIZONTAL); /** * 向"加载项"布局中添加一个圆型进度条。 */ ProgressBar mProgressBar = new ProgressBar(this); mProgressBar.setPadding(0, 0, 15, 0); mLoadLayout.addView(mProgressBar, mProgressBarLayoutParams); /** * 向"加载项"布局中添加提示信息。 */ TextView mTipContent = new TextView(this); mTipContent.setText("加载中..."); mLoadLayout.addView(mTipContent, mTipContentLayoutParams); /** * 获取ListView组件,并将"加载项"布局添加到ListView组件的Footer中。 */ mListView = getListView(); mListView.addFooterView(mLoadLayout); /** * 组ListView组件设置Adapter,并设置滑动监听事件。 */ setListAdapter(mListViewAdapter); mListView.setOnScrollListener(this); } public void onScroll(AbsListView view, int mFirstVisibleItem, int mVisibleItemCount, int mTotalItemCount) { mLastItem = mFirstVisibleItem + mVisibleItemCount - 1; if (mListViewAdapter.count > mCount) { mListView.removeFooterView(mLoadLayout); } } public void onScrollStateChanged(AbsListView view, int mScrollState) { /** * 当ListView滑动到最后一条记录时这时,我们会看到已经被添加到ListView的"加载项"布局, 这时应该加载剩余数据。 */ if (mLastItem == mListViewAdapter.count && mScrollState == OnScrollListener.SCROLL_STATE_IDLE) { if (mListViewAdapter.count <= mCount) { mHandler.postDelayed(new Runnable() { @Override public void run() { mListViewAdapter.count += 10; mListViewAdapter.notifyDataSetChanged(); mListView.setSelection(mLastItem); } }, 1000); } } } class ListViewAdapter extends BaseAdapter { int count = 10; public int getCount() { return count; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View view, ViewGroup parent) { TextView mTextView; if (view == null) { mTextView = new TextView(ListViewLoadActivity.this); } else { mTextView = (TextView) view; } mTextView.setText("Item " + position); mTextView.setTextSize(20f); mTextView.setGravity(Gravity.CENTER); mTextView.setHeight(60); return mTextView; } } } mainlayout: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Gallery android:id="@+id/main_gallery" android:layout_width="fill_parent" android:layout_height="80dp" android:background="#55000000" android:spacing="1dp" /> <Button android:id="@+id/main_bt" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" > </Button> <Button android:id="@+id/main_bt2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" > </Button> </LinearLayout>
- InternetGallery.rar (116.9 KB)
- 下载次数: 263
发表评论
-
Git的正确使用姿势
2019-03-30 11:05 8481,Git教程 廖雪峰老师的Git教程 https://www ... -
简单的开机启动方法
2019-02-27 15:13 497把程序的快捷方式放在下面这个隐藏目录密码 C:\Progra ... -
WebDeploy部署
2019-02-27 09:57 588如果出现"检查授权和委派设置"的报错,在 ... -
Github多账号ssh配置
2019-02-24 16:06 527ssh-keygen -t rsa -C "emai ... -
SqlServer数据库收缩
2019-02-23 17:07 922--设置为简单模式 ALTER DATABASE A ... -
自制https访问
2019-02-21 11:48 581制作过程 1,自制CA私钥 openssl genrsa -d ... -
Rar压缩命令
2019-02-15 15:25 886Rar压缩命令 "C:\Program File ... -
Github常用命令
2019-02-14 16:13 89echo "# dacaba.github.io ... -
npm
2019-02-02 21:44 521npm install --registry=https: ... -
SqlServer重建索引
2019-01-19 13:45 945SET NOCOUNT ON; DECLARE @obj ... -
自制证书实现网站https访问
2019-01-18 12:00 957制作过程 1,自制CA私 ... -
Linux下nginx启动与重启
2018-11-30 14:46 1176#重启:先Kill 再启动 kill -9 $(ps - ... -
FastDfs快速安装
2018-11-30 13:51 881#启动tracker/storage/nginx #启动t ... -
linux静态IP设置
2018-11-29 18:31 875修改文件 /etc/sysconfig/network-sc ... -
Linux基础
2018-11-29 14:13 513脚本的运用 1,新建脚本文件build.sh,内容如下: ... -
常用CMD命令
2018-11-16 14:27 111查询IP信息 ipconfig 查询端口占用 C:\&g ... -
webpack
2018-09-14 18:08 607cnpm install webpack --save ... -
计数排序
2018-09-10 18:53 375计数排序(Counting Sort) ... -
二分排序法
2018-09-10 17:07 1402现在我来简单叙述一下二分法排序的思想, 1,从第0个元素开始用 ... -
EF的三种继承模式
2018-08-22 15:53 1445三种继承模式 Table per Type(TPT)继承 ...
相关推荐
Gallery异步加载图片和listView动态刷新 .rar
简洁 明确 listview异步加载图片
Android_ListView动态刷新
图片异步加载,照片墙,异步加载listview中的图片 代码3 说明:http://blog.csdn.net/wjyyxzzjnws/article/details/10041125
AsyncTask的使用及ListView的常见优化 asyncTask异步加载数据 使用了LruCache优化图片加载 通过滑动监听提高ListView滑动流畅度.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习...
ListView动态加载刷新
Android 异步加载图片,对ListView的异步加载图片的功能演示,主要根据url读取图片返回流的方法。为了方便演示,将请求图片的链接先固定,每读取好一个图片就更新,界面比较简单,当然你可以做成比较好的,像很多好...
android 实现listview动态下拉刷新,动态加载数据 可以避免一次数据加载过多
JSON解析采用AsyncTask异步加载图片并用listview显示 这是项目中URL
ListView下拉刷新 ListView下拉刷新ListView下拉刷新ListView下拉刷新
Android Listview异步加载图片,图片错位解决方案
android listview 异步加载网络图片
Android实现ListView异步加载图片
ListView的异步加载图片并缓存,可以实现异步加载数据,异步加载图片,缓存图片,并且实现退出删除图片缓存
android异步加载网络图片到ListView
实现了异步加载图片进度条,代码更具有规范性
android listview异步加载图片实例 用到了线程池 下载的图片会保存到本地 并在数据库中保留记录 再次加载时会直接从本地读取