您的位置:首页 > 理论基础 > 计算机网络

开源库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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: