///Xstream解析xml 加下拉刷新上拉加载
import java.text.SimpleDateFormat;
import java.util.Date;
import com.bwie.adapter.MyAdapter;
import com.bwie.bean_main.Datas;
import com.bwie.xlistview.XListView;
import com.bwie.xlistview.XListView.IXListViewListener;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
import com.thoughtworks.xstream.XStream;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
public class MainActivity extends Activity implements IXListViewListener{
String url="http://www.oschina.net/action/api/tweet_list".trim();
XListView xListView;
int index=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取控件ID
xListView=(XListView) findViewById(R.id.xlistview);
//xlistview的监听方法
xListView.setXListViewListener(this);
xListView.setPullLoadEnable(true);
xListView.setPullRefreshEnable(true);
getXML(1,10);
}
public void getXML(int a,int b){
//httputils联网请求数据
HttpUtils httpUtils=new HttpUtils();
RequestParams params=new RequestParams();
params.addBodyParameter("uid", 0+"");
params.addBodyParameter("pageIndex", a+"");
params.addBodyParameter("pageSize", b+"");
httpUtils.send(HttpMethod.POST, url, params,new RequestCallBack<String>() {
@Override
public void onFailure(HttpException arg0, String arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(ResponseInfo<String> arg0) {
// TODO Auto-generated method stub
//xstream解析xml
XStream xStream=new XStream();
xStream.processAnnotations(Datas.class);
final Datas fromXML = (Datas) xStream.fromXML(arg0.result);
//添加自定义适配器baseadapter
MyAdapter adapter=new MyAdapter(getApplicationContext(), fromXML.getTweets().getTweet());
xListView.setAdapter(adapter);
//监听item
xListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
Intent intent=new Intent(MainActivity.this,ShowActivity.class);
intent.putExtra("list", fromXML.getTweets().getTweet().get(position-1));
startActivity(intent);
}
});
Log.i("aaa", fromXML.toString());
}
});
}
//上拉加载
@Override
public void onRefresh() {
// TODO Auto-generated method stub
getXML(1,10);
onLoad();
}
//下拉刷新
@Override
public void onLoadMore() {
// TODO Auto-generated method stub
index++;
getXML(index,10);
onLoad();
}
//时间
public void onLoad() {
xListView.stopRefresh();
xListView.stopLoadMore();
// 设置日期格式
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
// 获取当前系统时间
String nowTime = df.format(new Date(System.currentTimeMillis()));
// 释放时提示正在刷新时的当前时间
xListView.setRefreshTime(nowTime);
}
}
主类的适配器MyAdapter
import java.util.List;
import com.bwie.bean_main.Tweet;
import com.bwie.round.RoundImageView;
import com.bwie.test.R;
import com.lidroid.xutils.BitmapUtils;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
//自定义适配器
public class MyAdapter extends BaseAdapter {
public final static int TYPE1=0;
public final static int TYPE2=1;
Context context;
List<Tweet> list;
//构造方法
public MyAdapter(Context context, List<Tweet> list) {
super();
this.context = context;
this.list = list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
//加载布局
@Override
public int getItemViewType(int position) {
// TODO Auto-generated method stub
if(!list.get(position).getImgSmall().equals("")){
return TYPE1;
}else{
return TYPE2;
}
}
//返回布局数量
@Override
public int getViewTypeCount() {
// TODO Auto-generated method stub
return 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder viewHolder;
ViewHolder1 viewHolder1;
//加载布局
int type=getItemViewType(position);
switch (type) {
case TYPE1:
if(convertView==null){
viewHolder=new ViewHolder();
convertView=LayoutInflater.from(context).inflate(R.layout.list_view01, null);
viewHolder.imageView1=(RoundImageView) convertView.findViewById(R.id.image_user);
viewHolder.imageView2=(ImageView) convertView.findViewById(R.id.image_show);
viewHolder.textView1=(TextView) convertView.findViewById(R.id.text_editor);
viewHolder.textView2=(TextView) convertView.findViewById(R.id.text_con);
convertView.setTag(viewHolder);
}else{
viewHolder=(ViewHolder) convertView.getTag();
}
ImageLoader imageLoader1=ImageLoader.getInstance();
imageLoader1.init(ImageLoaderConfiguration.createDefault(context));
BitmapUtils bitmapUtils1=new BitmapUtils(context);
imageLoader1.displayImage(list.get(position).getPortrait(),viewHolder.imageView1);
bitmapUtils1.display(viewHolder.imageView2, list.get(position).getImgSmall());
Log.i("ccc", list.get(position).getImgSmall());
viewHolder.textView1.setText(list.get(position).getAuthor());
viewHolder.textView2.setText(list.get(position).getBody());
break;
case TYPE2:
if(convertView==null){
viewHolder1=new ViewHolder1();
convertView=LayoutInflater.from(context).inflate(R.layout.list_view02, null);
viewHolder1.imageView1=(RoundImageView) convertView.findViewById(R.id.image_user1);
viewHolder1.textView1=(TextView) convertView.findViewById(R.id.text_editor1);
viewHolder1.textView2=(TextView) convertView.findViewById(R.id.text_con1);
convertView.setTag(viewHolder1);
}else{
viewHolder1=(ViewHolder1) convertView.getTag();
}
ImageLoader imageLoader=ImageLoader.getInstance();
imageLoader.init(ImageLoaderConfiguration.createDefault(context));
// BitmapUtils bitmapUtils1=new BitmapUtils(context);
imageLoader.displayImage(list.get(position).getPortrait(),viewHolder1.imageView1);
viewHolder1.textView1.setText(list.get(position).getAuthor());
viewHolder1.textView2.setText(list.get(position).getBody());
break;
}
return convertView;
}
//自定义viewholder
class ViewHolder{
ImageView imageView2;
RoundImageView imageView1;
TextView textView1,textView2;
}
class ViewHolder1{
RoundImageView imageView1;
TextView textView1,textView2;
}
}
详情界面ShowActivity
package com.bwie.test;
import com.bwie.bean_main.Tweet;
import com.bwie.bean_show.Test;
import com.bwie.bean_show.Tweet_show;
import com.bwie.round.RoundImageView;
import com.lidroid.xutils.BitmapUtils;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.thoughtworks.xstream.XStream;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
//详情页面
public class ShowActivity extends Activity {
String url="http://www.oschina.net/action/api/tweet_detail";
String id;
ImageView imageView1,imageView2;
RoundImageView imageView;
TextView textView1,textView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show);
imageView=(RoundImageView) findViewById(R.id.image);
imageView2=(ImageView) findViewById(R.id.image_02);
textView1=(TextView) findViewById(R.id.text_au);
textView2=(TextView) findViewById(R.id.text_down);
Intent intent = getIntent();
Tweet tweet=(Tweet) intent.getSerializableExtra("list");
id=tweet.getId();
getShow(id);
}
public void getShow(String id){
//httputils联网请求xml
HttpUtils httpUtils=new HttpUtils();
RequestParams params=new RequestParams();
params.addBodyParameter("id", id);
httpUtils.send(HttpMethod.POST, url, params,new RequestCallBack<String>() {
@Override
public void onFailure(HttpException arg0, String arg1) {
// TODO Auto-generated method stub
}
@Override
public void onSuccess(ResponseInfo<String> arg0) {
// TODO Auto-generated method stub
//xstream解析
XStream xStream=new XStream();
xStream.processAnnotations(Test.class);
final Test fromXML = (Test) xStream.fromXML(arg0.result);
Log.i("aaa", fromXML.getTweet().toString());
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
ImageLoader imageLoader1=ImageLoader.getInstance();
imageLoader1.init(ImageLoaderConfiguration.createDefault(getApplicationContext()));
// BitmapUtils bitmapUtils1=new BitmapUtils(context);
imageLoader1.displayImage(fromXML.getTweet().getPortrait(),imageView);
BitmapUtils bitmapUtils=new BitmapUtils(getApplicationContext());
//
// bitmapUtils.display(imageView1, fromXML.getTweet().getPortrait());
textView1.setText(fromXML.getTweet().getAuthor());
textView2.setText(fromXML.getTweet().getBody());
//判断图片加载
if(!fromXML.getTweet().getImgBig().equals("")){
bitmapUtils.display(imageView2, fromXML.getTweet().getImgBig());
}else{
imageView2.setVisibility(View.INVISIBLE);
}
}
});
}
});
}
}
自定义圆形图片RoundImageView
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.ImageView;
public class RoundImageView extends ImageView {
//生成三个构造方法
public RoundImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public RoundImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RoundImageView(Context context) {
super(context);
}
//重写OnDraw方法
@Override
protected void onDraw(Canvas canvas) {
//获得系统的图片
Drawable drawable=getDrawable();
//如果是空 那么返回空
if (drawable==null) {
return;
}
//如果宽度和高度为0那么无效果图不显示
if (getWidth()==0||getHeight()==0) {
return;
}
//将drawable图片转化成BitMap类型
Bitmap bitmap=((BitmapDrawable) drawable).getBitmap();
if (bitmap==null) {
return;
}
//从一个drawable对象复制出来一个bitmap
//设置图片背景为透明
Bitmap bitmap1=bitmap.copy(Bitmap.Config.ARGB_8888, true);
int w=getWidth();
Bitmap roundbitmap= getCroppedBitmap(bitmap1, w);//调用方法 返回的是一个Bitmap
canvas.drawBitmap(roundbitmap, 0,0, null);//实现画一个圆图片
}
//返回的是一张图片
public static Bitmap getCroppedBitmap(Bitmap bmp, int radius){
//定义图片为空
Bitmap sbmp;
if (bmp.getWidth()!=radius||bmp.getHeight()!=radius)
sbmp=Bitmap.createScaledBitmap(bmp, radius, radius, false);
else
sbmp=bmp;
//将drawable类型的图片转化成bitmap
Bitmap output=Bitmap.createBitmap(sbmp.getWidth(), sbmp.getHeight(), Config.ARGB_8888);
//展示在画布上
Canvas canvas=new Canvas(output);
//定义画笔
final Paint paint=new Paint();
final Rect rect=new Rect(0, 0, sbmp.getWidth(), sbmp.getHeight());
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
//画圆 叠加图片
canvas.drawCircle(sbmp.getWidth()/2+0.7f, sbmp.getHeight()/2+0.7f, sbmp.getWidth()/2+0.1f, paint);
paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(sbmp, rect, rect, paint);
return output;
}
}
bean类
Tweet
public class Tweet implements Serializable{
private String id;
private String portrait;
private String author;
private String authorid;
private String body;
private String attach;
private String appclient;
private String commentCount;
private String pubDate;
private String imgSmall;
private String imgBig;
private String likeCount;
private String isLike;
private String likeList;
}
Tweets
import com.thoughtworks.xstream.annotations.XStreamImplicit;
public class Tweets implements Serializable{
@XStreamImplicit(itemFieldName="tweet")
private List<Tweet> tweet;
}
Datas
import com.thoughtworks.xstream.annotations.XStreamAlias;
//注解
//封装类
@XStreamAlias("oschina")
public class Datas implements Serializable{
private String tweetCount;
private String pagesize;
@XStreamAlias("tweets")
private Tweets tweets;
}
bean_show
Tweet_show
public class Tweet_show implements Serializable{
private String id;
private String portrait;
private String author;
private String authorid;
private String body;
private String attach;
private String appclient;
private String commentCount;
private String pubDate;
private String imgSmall;
private String imgBig;
private String likeCount;
private String isLike;
private String likeList;
}
Test
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("oschina")
public class Test {
private Tweet_show tweet;
}
布局
activity_show
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.bwie.round.RoundImageView
android:id="@+id/image"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="20dp"
android:layout_marginTop="18dp"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/text_au"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/image"
android:layout_marginLeft="27dp"
android:layout_toRightOf="@+id/image"
android:text="TextView" />
<TextView
android:id="@+id/text_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/image"
android:layout_alignParentRight="true"
android:layout_marginTop="10dp"
android:layout_below="@+id/image"
android:text="TextView" />
<ImageView
android:id="@+id/image_02"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/text_down"
android:layout_below="@+id/text_down"
android:layout_marginTop="46dp"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
list_view01
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.bwie.round.RoundImageView
android:id="@+id/image_user"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="21dp"
android:layout_marginTop="15dp"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/text_editor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/image_user"
android:layout_marginLeft="19dp"
android:layout_toRightOf="@+id/image_user"
android:textColor="#000"
android:textSize="12sp"
android:text="TextView" />
<TextView
android:id="@+id/text_con"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/image_user"
android:layout_alignLeft="@+id/text_editor"
android:textColor="#000"
android:textSize="12sp"
android:text="TextView" />
<ImageView
android:id="@+id/image_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/text_con"
android:layout_below="@+id/text_con"
android:layout_marginTop="16dp"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
list_view02
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.bwie.round.RoundImageView
android:id="@+id/image_user1"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="21dp"
android:layout_marginTop="15dp"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/text_editor1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@+id/image_user1"
android:layout_marginLeft="19dp"
android:layout_toRightOf="@+id/image_user1"
android:textColor="#000"
android:textSize="12sp"
android:text="TextView" />
<TextView
android:id="@+id/text_con1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/image_user1"
android:layout_alignLeft="@+id/text_editor1"
android:layout_alignParentRight="true"
android:textColor="#000"
android:textSize="12sp"
android:text="TextView" />
</RelativeLayout>
strings文件添加
<string name="xlistview_header_hint_normal">下拉刷新</string>
<string name="xlistview_header_hint_ready">松开刷新数据</string>
<string name="xlistview_header_hint_loading">正在加载...</string>
<string name="xlistview_header_last_time">上次更新时间:</string>
<string name="xlistview_footer_hint_normal">查看更多</string>
<string name="xlistview_footer_hint_ready">松开载入更多</string>
//切记要加联网权限