开源库pulltorefresh实现QQ下拉刷新界面网络获取图片
2015-11-25 12:16
459 查看
导入库点击下面链接
点击打开链接
效果图
代码
布局代码
点击打开链接
效果图
代码
package com.xiaoke.openfreash; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshBase.Mode; import com.handmark.pulltorefresh.library.PullToRefreshBase.OnRefreshListener; import com.handmark.pulltorefresh.library.PullToRefreshListView; 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.ArrayAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends Activity { private PullToRefreshListView listview = null; private ArrayList<HashMap<String, Object>> list = null; private MyAdapter adapter = null; private int index = 0; private final String KYE_TEXT = "textview", KEY_IMAGE = "image"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); list = new ArrayList<HashMap<String, Object>>(); listview = (PullToRefreshListView) findViewById(R.id.pull_id); // 设置下拉刷新,不是上拉刷新 listview.setMode(Mode.PULL_FROM_START); // 监听开始 listview.setOnRefreshListener(new OnRefreshListener<ListView>() { // 下拉执行 @Override public void onRefresh(PullToRefreshBase<ListView> refreshView) { // TODO Auto-generated method stub new MyTask().execute(); } }); // 执行listview adapter = new MyAdapter(this, -1); listview.setAdapter(adapter); } public static byte[] loadRawDataFromURL(String u) throws Exception { // 给定网址获取URL对象 URL url = new URL(u); // 获取HttpURLConnection对象 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(30000); conn.setDoInput(true); // 设置相应时间 conn.setReadTimeout(30000); // 允许连接 conn.connect(); // 通过HttpURLConnection对象获取输入字节流 InputStream is = conn.getInputStream(); // 创建输入字符流 BufferedInputStream bis = new BufferedInputStream(is); // 创建缓存输出字节流 ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 设置获取数据大小的数组 final int BUFFER_SIZE = 2048; final int EOF = -1; int c; byte[] buf = new byte[BUFFER_SIZE]; // 将读入的数据写入缓存字节流中 while (true) { c = bis.read(buf); if (c == EOF) break; baos.write(buf, 0, c); } conn.disconnect(); is.close(); // 字节数组获取数据 byte[] data = baos.toByteArray(); baos.flush(); // 返回数据 return data; } public class MyAdapter extends ArrayAdapter { LayoutInflater inflater = null; public MyAdapter(Context context, int resource) { super(context, resource); // TODO Auto-generated constructor stub inflater = LayoutInflater.from(context); } @Override public int getCount() { return list.size(); } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) convertView = inflater.inflate(R.layout.a_activity, null); HashMap<String, Object> map = list.get(position); TextView text = (TextView) convertView.findViewById(R.id.text_id); ImageView image = (ImageView) convertView .findViewById(R.id.image_id); text.setText(map.get(KYE_TEXT) + ""); image.setImageBitmap((Bitmap) list.get(position).get(KEY_IMAGE)); return convertView; } } public class MyTask extends AsyncTask { @Override protected void onPreExecute() { // 下拉显示开始 listview.setRefreshing(); } @Override protected Object doInBackground(Object... params) { HashMap<String, Object> map = new HashMap<String, Object>(); // 模拟数据增加,模拟耗时操作 byte[] data; try { data = loadRawDataFromURL("https://www.baidu.com/img/bd_logo1.png"); int length = data.length; Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, length); map.put(KYE_TEXT, index++); map.put(KEY_IMAGE, bitmap); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return map; } @Override protected void onPostExecute(Object result) { // 添加数据 list.add((HashMap<String, Object>) result); // 更新界面 adapter.notifyDataSetChanged(); // 加载完成结束下拉界面 listview.onRefreshComplete(); } } }
布局代码
<?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="vertical" > <TextView android:id="@+id/text_id" android:layout_width="match_parent" android:layout_height="wrap_content" /> <ImageView android:id="@+id/image_id" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
<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" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.xiaoke.openfreash.MainActivity" > <com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/pull_id" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
相关文章推荐
- 神经网络(3)---如何表示hypothesis,如何表示我们的model
- 使用自定义的item、Adapter和AsyncTask、第三方开源框架PullToRefresh联合使用实现自定义的下拉列表(从网络加载图片显示在item中的ImageView)
- TCP与UDP的区别和联系
- Android-上传图片(二)_HttpClient
- 【网络】WebService到底是什么?
- 关于cookie与网络安全的一些学习
- JavaScript菜鸟教程学习 http://www.runoob.com/js/js-tutorial.html
- linux设置网关测试网络
- HttpClient 4.3超时设置
- worker模式的探究
- WCF使用net.tcp寄宿到IIS中(转)
- Android-上传图片(-)_HttpURLConnection
- iOS 多线程 & 网络 - 4.0 - AFN框架简单使用
- 最强最全的Tree命令详解 http://www.blogjava.net/coderdream/archive/2008/01/18/176352.html
- HTTP消息头信息
- IP TCP和HTTP
- HTTP协议各种状态代码
- 贝叶斯网络
- VMware10中的Linux系统利用NAT网络连接方式访问外网配置
- 二叉搜索树-BST-查找算法-插入算法-删除算法 http://www.cnblogs.com/pangxiaodong/archive/2011/08/24/2151060.html