Android列表控件选项中添加进度框ProgressBar实现
今天有时间就学习了下在ListView、GridView列表项中清加ProgressBar,小马用最简单的代码实现可以通用的功能,人人都能看懂,哈哈,直接说下,如果你的适配器getView方法返回的View是一个自定义控件的话,有点不好实现哦,不过可以用两个控件之间Visible 、Invisible来切换实现今天的效果,下面的例子是主类、适配器、异步下载类等的都写在一个类里面了,为的是发的博文里一次性看的话方便,如果大家觉得结构不清楚的话根据自身需求自行抽取下,今天的DEMO只是个简单的思路,其它控件列表项中添加进度框大家也可以用如下的方法实现,老规矩,先看效果,再看代码:
(截图有点失真,但无防)
一:效果图如下
二:效果看完了,看下实现的路是怎样的,吼吼:核心代码如下:
- package com.example.listviewitemprogress;
- import java.io.InputStream;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import android.app.Activity;
- import android.content.Context;
- import android.graphics.Bitmap;
- import android.graphics.BitmapFactory;
- import android.os.AsyncTask;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.BaseAdapter;
- import android.widget.Button;
- import android.widget.ImageView;
- import android.widget.ListView;
- import android.widget.ProgressBar;
- import android.widget.TextView;
- /**
- * @author 小马果
- * ListView列表项中添加ProgressBar
- */
- public class MainActivity extends Activity {
- private ListView mListView = null ;
- private static final String imgUrl = "http://www.qq510.net/uploads/allimg/100613/2_100613171230_5.jpg";
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- init();
- }
- private void init(){
- mListView = (ListView)findViewById(R.id.listview);
- mListView.setAdapter(new MyListViewAdapter(this));
- }
- private class MyListViewAdapter extends BaseAdapter{
- private LayoutInflater inflater = null;
- public MyListViewAdapter(Context con){
- inflater = (LayoutInflater)con.getSystemService(LAYOUT_INFLATER_SERVICE);
- }
- @Override
- public int getCount() {
- // TODO Auto-generated method stub
- return Integer.MAX_VALUE;
- }
- @Override
- public Object getItem(int arg0) {
- // TODO Auto-generated method stub
- return arg0;
- }
- @Override
- public long getItemId(int position) {
- // TODO Auto-generated method stub
- return position;
- }
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- // TODO Auto-generated method stub
- ViewHolder mHolder = new ViewHolder() ;
- if(convertView == null){
- convertView = inflater.inflate(R.layout.list_item, null);
- mHolder.iv = (ImageView)(convertView.findViewById(R.id.iv));
- mHolder.mBtn = (Button)(convertView.findViewById(R.id.button));
- mHolder.pb = (ProgressBar)(convertView.findViewById(R.id.progressBar1));
- mHolder.tv = (TextView)(convertView.findViewById(R.id.textView1));
- convertView.setTag(mHolder);
- }else{
- mHolder = (ViewHolder)convertView.getTag();
- }
- new AsyncTask<ViewHolder, Void, Bitmap>() {
- private ViewHolder v;
- @Override
- protected Bitmap doInBackground(ViewHolder... params) {
- v = params[0];
- return BitmapFactory.decodeStream(getStreamFromURL(imgUrl));
- }
- @Override
- protected void onPostExecute(Bitmap result) {
- super.onPostExecute(result);
- v.pb.setVisibility(View.GONE);
- v.mBtn.setVisibility(View.VISIBLE);
- v.iv.setImageBitmap(result);
- }
- }.execute(mHolder);
- return convertView;
- }
- }
- static class ViewHolder{
- ImageView iv = null ;
- Button mBtn = null ;
- ProgressBar pb = null ;
- TextView tv = null ;
- }
- static String length;
- public static InputStream getStreamFromURL(String p_w_picpathURL) {
- InputStream in=null;
- try {
- URL url=new URL(p_w_picpathURL);
- HttpURLConnection connection=(HttpURLConnection) url.openConnection();
- // connection.setRequestProperty("Connection", "Keep-Alive");//维持长连接
- connection.setConnectTimeout(6* 1000);//设置连接超时
- if (connection.getResponseCode() != 200) throw new RuntimeException("请求失败");
- length = connection.getHeaderField("Content-Length");
- in=connection.getInputStream();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- return in;
- }
- }
三:再来看下两个布局吧(为方便查,小马就放一起了:)
- 主布局文件:
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <ListView
- android:id="@+id/listview"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:drawSelectorOnTop="false"
- android:choiceMode="none"
- android:focusable="false"
- android:scrollingCache="false"
- android:fadingEdge="none"
- android:focusableInTouchMode="false"
- android:clickable="false"
- android:dividerHeight="0.5dip" />
- </RelativeLayout>
- ListView列表控件Item布局:
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="110dp"
- android:background="#00ffeeaa"
- >
- <ImageView
- android:id="@+id/iv"
- android:layout_width="110dp"
- android:background="@drawable/ic_action_search"
- android:layout_height="110dp"
- android:contentDescription="@string/hello_world"/>
- <Button
- android:id="@+id/button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentRight="true"
- android:layout_centerVertical="true"
- android:text="@string/xiaomaguo"/>
- <ProgressBar
- android:id="@+id/progressBar1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
- android:layout_centerVertical="true"
- android:layout_alignTop="@+id/button"
- android:layout_marginLeft="29dp" />
- <TextView
- android:id="@+id/textView1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignBaseline="@+id/button"
- android:layout_alignBottom="@+id/button"
- android:layout_centerVertical="true"
- android:layout_toLeftOf="@+id/button"
- android:text="@string/cool" />
- </RelativeLayout>
最后,由于选项中使用的图片是小马从网上异步下载加载的,所以得开下联网权限,大家别忘了加就行了,如下:
<uses-permission android:name="android.permission.INTERNET"/>
怎么样?简单吧,刚开始的时间没思路,后来玩花辨的时候想到了,美丽说瀑布流实现的原理跟这个差不多,上面这个只是个小的DEMO,给大家提供个思路,GridView等其它控件,大家可以直接参照上面这个代码来写,吼吼,小DEMO源码已经加在附件中,觉得有用就下下来瞅瞅吧,加油,每天进步一点点,祝 :Happy ! O_O
转载于:https://blog.51cto.com/mzh3344258/995321
相关文章:

写一个通用数据访问组件
出处:http://www.csharp-corner.com willsound(翻译) 我收到过好多Email来问我如何用一个通用的数据提供者(data provider)在不失自然数据提供者(native data provider)稳定而强大功能的前提下来访问不同的数据源(data sources).一个小伙子…

InstallShield 2015 LimitedEdition VS2012 运行bat文件
转载:http://www.cnblogs.com/fengwenit/p/4271150.html 运行bat文件 网上很多介绍如何运行bat的方法,但我这个是limted 版本,不适用。 1. 打开 Define Setup Requirements and Actions –> Custom Actions 2. 右健 After Register Product –> Ne…

理解C#中的string类型
作者:未知目的 本文的目的在于揭示和DOTNET及C#相关的一些常见的和不常见的问题。在这些问题中我的第一篇文章和string数据类型有关,string数据类型是一种引用类型,但是当和其他引用类型比较的时候,很多开发人员可能并不能完全理解它的行为。 问题 对于常见的引用类…
最全总结!聊聊 Python 操作PDF的几种方法
作者 | 陈熹来源 | 早起Python前言本文主要涉及:os 模块综合应用glob 模块综合应用PyPDF2 模块操作基本操作PyPDF2 导入模块的代码常常是:from PyPDF2 import PdfFileReader, PdfFileWriter这里导入了两个方法:PdfFileReader 可以理解为读取器…

three.js(六) 地形法向量生成
2019独角兽企业重金招聘Python工程师标准>>> 上一节采用 分形算法生成地形的高度值, 接着我们需要生成每个顶点的法向量。 three.js 的PlaneGeometry 自带有法向量, 法向量分为两种 即 平面法向量 和 平面每个定点法向量。 因此一个n*n 块组成…

ASP.NET中使用多个runat=server form
作者:未知ASP.NET 在同一个页面不支持多个 runatserver forms,要解决这个问题,可以把每个 form 放在一个单独的 panel 控件中,这样用户就可以简单地通过单选按钮在不同 panel 间切换。代码如下:2FormExample.aspx<%…
激发企业大“智慧” | 深度赋能AI全场景 揭秘你不知道的移动云
2020年是人工智能技术发展的关键年。疫情之下,世界见证了人工智能在抗击疫情中发挥的积极作用;今年4月,国家发改委正式将人工智能确定为新基建的重要领域之一。在历史机遇下,AI已实现"质变和量变",正迈入与技…

ExtJS 4.x 得到资源树上任意的节点对象
上半年做ExtJS 4.x 的时候,遇到过对资源树操作的情况: Ext.tree.Panel 如下图:目的: 直接根据每个节点的{任意key : 对应value},就能找到匹配的节点对象 代码如下: refs : [ { selector : rtree, …

【转载】mysql常用函数汇总
转载地址:http://www.jb51.net/article/40179.htm 一、数学函数ABS(x) 返回x的绝对值BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制)CEILING(x) 返回大于x的最小整数值EXP(x) 返回值e(自然对数的底&…

有关java的一些话
2019独角兽企业重金招聘Python工程师标准>>> 跟着做完TankWar,java才算是入门了,真正学习java从看尚学堂马士兵老师的视频开始,至今三个月已过,感谢马老师的精彩讲解,您才是我真正的java入门老师࿰…

ADO.NET 2.0中的SqlCommand.ExecutePageReader
http://blog.joycode.com/liuhuimiao/在.NET 2.0 PDC或Beta1中,可以看到SqlCommand对象新增了个ExecutePageReader方法,该方法实现了分页读取数据的功能。对于分页读取数据,在ADO.NET1.1中(当然2.0也适合)一般常用动态…
组合游戏系列5: 井字棋、五子棋AlphaGo Zero 算法实战
来源 | MyEncyclopedia上一篇我们从原理层面解析了AlphaGo Zero如何改进MCTS算法,通过不断自我对弈,最终实现从零棋力开始训练直至能够打败任何高手。在本篇中,我们在已有的N子棋OpenAI Gym 环境中用Pytorch实现一个简化版的AlphaGo Zero算法…
2020职场人裸辞三大原因:不开心、工资低、没有盼头
近期,脉脉发布了《2020职场人裸辞现状调研报道》,报道显示2020最让职场人想裸辞的三大原因为:不开心、工资低、没有盼头。报告数据中还显示,工资不满预期是最让人想要裸辞的主要原因,但有超过6成职场人表示,…

Oracle PL/SQL编程学习笔记:Merge方法的使用
Oracle11g的Merge很强大! 1 create or replace procedure BRANCE_REPORT_MERGE is2 3 begin4 Merge into BRANCHREPORT desttable5 using TEMP_BRANCHREPORT tmptable6 on (desttable.SENDER_IDtmptable.SENDER_ID and desttable.BRANCH_IDtmptable.BRANCH_ID…

2.0中获取数据库连接统计数据
作者: http://blog.joycode.com/liuhuimiao/.NET 2.0中的SqlConnection多了一个StatisticsEnabled属性和ResetStatistics()、RetrieveStatistics()两个方法,用于获取SQLServer的连接统计数据。当然,这样做是以性能损耗为代价的,但…

Python学习day5作业-ATM和购物商城
Python学习day5作业Python学习day5作业ATM和购物商城作业需求ATM:指定最大透支额度可取款定期还款(每月指定日期还款,如15号)可存款定期出账单支持多用户登陆,用户间转帐支持多用户管理员可添加账户、指定用户额度、冻…
60分钟看懂HMM的基本原理
作者 | 梁云1991来源 | Python与算法之美HMM模型,韩梅梅的中文拼音的缩写,所以又叫韩梅梅模型,由于这个模型的作者是韩梅梅的粉丝,所以给这个模型取名为HMM。开玩笑!HMM模型,也叫做隐马尔科夫模型ÿ…

获取远程网卡MAC地址
出自: http://blog.joycode.com/liuhuimiao/朋友mingal急问我有关获取远程网卡MAC地址的ASP.net实现。我一开始以为是获取本机MAC地址,说了几种方法给他。由于他还需要获取服务器(本机)相关信息,如硬盘序列号、CPU信息…

[hadoop源码阅读][9]-mapreduce-概论
hadoop的mapreduce的运行流程大概就是如下图所示了 如果要是文字描述,估计要大篇幅了,大家可以参考下面的参考文档. 参考文档 1.http://caibinbupt.iteye.com/blog/336467 2.http://hadoop.apache.org/docs/r0.19.2/cn/mapred_tutorial.html 3.http://developer.yahoo.com/hado…

【小白的CFD之旅】小结及预告
这是小白系列的索引,后续会继续更新。 已更新的部分 01 引子02 江小白03 老蓝04 任务05 补充基础06 流体力学基础07 CFD常识08 CFD速成之道09 初识FLUENT10 敲门实例11 敲门实例【续】12 敲门实例【续2】13 敲门实例【续3】14 实例反思15 四种境界16 流程17 需要编程…
Kaggle金牌得主的Python数据挖掘框架,机器学习基本流程都讲清楚了
作者 | 刘早起来源 | 早起Python导语:很多同学在学习机器学习时往往掉进了不停看书、刷视频的,但缺少实际项目训练的坑,有时想去练习却又找不到一个足够完整的教程,本项目翻译自kaggle入门项目Titanic金牌获得者的Kernelÿ…

input type右对齐与只读的
右对齐的 <input type"text" style"background:#efefef; text-align:right" readonly value"this" /> 只读的input <input type"text" name"nodeCode" readonly value"<%functionNodeForm.getNodeCode()%…

如何从sdcard读取文件
2019独角兽企业重金招聘Python工程师标准>>> 首先,我们必须明白文件储存格式是有许多种的,如utf-8,unicode等。 那么,我们如何将文件原封不动的读取出来呢,我们可以设定,文件储存的绝对路径为filepath。则代…

HDU 2034 人见人爱A-B
人见人爱A-B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 77157 Accepted Submission(s): 21509 Problem Description参加过上个月月赛的同学一定还记得其中的一个最简单的题目,就是{A}{B}&#…

Java中的包,类的导入,静态导入
包的作用 1. 为了更好的组织代码,能够将自己的代码与代码库的代码分离。 2. 在需要合作完成的工作中,可以使用分包的方式来尽量的减少类命名的冲突。 Sun公司推荐程序员使用公司域名的反向字符作为公司项目的起始包名:如 baidu.com --> c…

实现800*600,1024*768两套分辨率方案
下面这段代码,可以实现800*600,1024*768两套分辨率方案。 <html><head><title>Untitled Document</title><script language"javascript">function go(){var myWidthscreen.widthif (myWidth>800){window.location.repl…
倒计时 4 天!高通人工智能应用创新大赛颁奖典礼线上隆重举行
经过7 个月的激烈角逐,由高通公司(Qualcomm)、中国智谷重庆经开区、CSDN、Testin云测、OPPO、极视角、中科创达、创业邦联合主办,重庆经开区高通中国中科创达联合创新中心协办,TensorFlow Lite 作为开源技术合作伙伴的…

IOS分享扩展使用JS脚本
2019独角兽企业重金招聘Python工程师标准>>> 实现一个分享扩展插件,功能是从Safari网页中截取当前网页的图片内容 基本的步骤总结在下面: 1.创建一个JS文件,命名为MyJavascriptFile.js,文件的功能是解析safari网页内容…

电脑人会得哪些病----------关注健康,关爱生命!
作者:未知 随着科技水平的提高,现代办公室综合症,特别是高科技病渐渐成为现代职业病。电脑可以说是本世纪最伟大的发明之一,有了它,人们工作、生活、学习的方式都出现了划时代的改变,随着网络与电脑的普及&…

IOS上传图片的方法
下面是图片上传的方法:-(void)loadImage:(NSString*)aurl{NSData *imageData;NSMutableData *postBody;NSString *stringBoundary, *contentType;NSURL *url [NSURL URLWithString:aurl]; //将字符串转换为NSURL格式NSArray *paths…