- 浏览: 1020553 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
自己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 9231,Git教程 廖雪峰老师的Git教程 https://www ... -
简单的开机启动方法
2019-02-27 15:13 545把程序的快捷方式放在下面这个隐藏目录密码 C:\Progra ... -
WebDeploy部署
2019-02-27 09:57 693如果出现"检查授权和委派设置"的报错,在 ... -
Github多账号ssh配置
2019-02-24 16:06 594ssh-keygen -t rsa -C "emai ... -
SqlServer数据库收缩
2019-02-23 17:07 1011--设置为简单模式 ALTER DATABASE A ... -
自制https访问
2019-02-21 11:48 673制作过程 1,自制CA私钥 openssl genrsa -d ... -
Rar压缩命令
2019-02-15 15:25 963Rar压缩命令 "C:\Program File ... -
Github常用命令
2019-02-14 16:13 89echo "# dacaba.github.io ... -
npm
2019-02-02 21:44 572npm install --registry=https: ... -
SqlServer重建索引
2019-01-19 13:45 987SET NOCOUNT ON; DECLARE @obj ... -
自制证书实现网站https访问
2019-01-18 12:00 1106制作过程 1,自制CA私 ... -
Linux下nginx启动与重启
2018-11-30 14:46 1275#重启:先Kill 再启动 kill -9 $(ps - ... -
FastDfs快速安装
2018-11-30 13:51 993#启动tracker/storage/nginx #启动t ... -
linux静态IP设置
2018-11-29 18:31 937修改文件 /etc/sysconfig/network-sc ... -
Linux基础
2018-11-29 14:13 564脚本的运用 1,新建脚本文件build.sh,内容如下: ... -
常用CMD命令
2018-11-16 14:27 111查询IP信息 ipconfig 查询端口占用 C:\&g ... -
webpack
2018-09-14 18:08 703cnpm install webpack --save ... -
计数排序
2018-09-10 18:53 430计数排序(Counting Sort) ... -
二分排序法
2018-09-10 17:07 1464现在我来简单叙述一下二分法排序的思想, 1,从第0个元素开始用 ... -
EF的三种继承模式
2018-08-22 15:53 1500三种继承模式 Table per Type(TPT)继承 ...
相关推荐
本项目“Gallery异步加载图片和listView动态刷新”着重探讨如何优化这两个组件的性能,特别是在处理大量图像时。 Gallery组件是Android提供的一种可以左右滑动浏览的图片展示控件,它允许用户水平滚动查看图片,...
在实际开发中,对于ListView和GridView的优化也是必不可少的,例如使用ViewHolder模式提高性能,或者利用AsyncTask进行异步加载以减少UI阻塞。对于Gallery,由于其已被废弃,理解如何用新的组件替换是学习的重点。 ...
可以通过使用ViewHolder减少视图查找,异步加载图片以避免阻塞主线程,以及分页加载数据等方式提高性能。 9. **动画效果**:为了提供更好的用户体验,开发者还可以添加过渡动画,比如在数据加载时显示加载指示器,...
可以使用异步任务或者`AsyncTask`来处理这些操作,同时使用图片加载库(如Glide或Picasso)来缓存和优化图片显示。 总之,实现"listView上下拉到更新带header头图片轮播"的功能,需要结合Android的基础组件、图片...
android Gallery实现异步加载网络图片 并只加载当前停止页面图.zip Android ListView下拉刷新 Demo.zip Android SMS 短信内容显示在一个 泡泡 形状的窗口中.zip Android 打包签名 从生成keystore到完成签名.zip ...
4. **线程管理与异步加载**: - 在Android中,为了保证用户体验,通常会将耗时的操作放在后台线程进行。Gallery2可能会使用AsyncTask或Loader来加载图片,避免阻塞主线程。 - 数据加载和UI更新的同步机制,确保...
android Gallery实现异步加载网络图片 并只加载当前停止页面图.zip Android ListView下拉刷新 Demo.zip Android SMS 短信内容显示在一个 泡泡 形状的窗口中.zip Android 打包签名 从生成keystore到完成签名.zip ...
10. **动态ListView,支持异步更新列表,异步更新图片**:在大量数据的列表中,异步加载和更新数据可以提高用户体验。可能使用了AsyncTask或Loader API来实现后台数据加载,同时结合Universal Image Loader或其他...
android Gallery实现异步加载网络图片 并只加载当前停止页面图.zip Android ListView下拉刷新 Demo.zip Android sMs 短信内容显示在一个 泡泡 形状的窗口中,zip Android 打包签名 从生成keystore到完成签名,zip ...
例如,下拉刷新与底部加载更多的ListView和ScrollView,这些都是为了处理大数据列表而设计的。下拉刷新常使用SwipeRefreshLayout,底部加载更多通常结合Adapter实现,监听滚动事件,当用户接近列表底部时加载更多...
9.74、从GALLERY选取图片 303 9.75、打开录音机 303 9.76、语音朗读 303 9.77、手机获取视频流显示在电脑上 305 9.78、蓝牙的使用 313 9.79、一个很好的加密解密字符串 316 9.80、DRAWABLE、BITMAP、BYTE[]之间的...