activity_main.xml
<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"
tools:context="com.example.lunbodemo.MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</android.support.v4.view.ViewPager>
</RelativeLayout>
TabData
package com.example.viewpagerlunbo;
import java.util.ArrayList;
/**
* 页签详情页数据
*
* @author Kevin
*
*/
public class TabData {
public int retcode;
public TabDetail data;
public class TabDetail {
public String title;
public String more;
public ArrayList<TabNewsData> news;
public ArrayList<TopNewsData> topnews;
@Override
public String toString() {
return "TabDetail [title=" + title + ", news=" + news
+ ", topnews=" + topnews + "]";
}
}
/**
* 新闻列表对象
*
* @author Kevin
*
*/
public class TabNewsData {
public String id;
public String listimage;
public String pubdate;
public String title;
public String type;
public String url;
@Override
public String toString() {
return "TabNewsData [title=" + title + "]";
}
}
/**
* 头条新闻
*/
public class TopNewsData {
public String id;
public String topimage;
public String pubdate;
public String title;
public String type;
public String url;
@Override
public String toString() {
return "TopNewsData [title=" + title + "]";
}
}
@Override
public String toString() {
return "TabData [data=" + data + "]";
}
}
MainActivity
package com.example.viewpagerlunbo;
import java.util.ArrayList;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import com.example.viewpagerlunbo.TabData.TopNewsData;
import com.google.gson.Gson;
import com.lidroid.xutils.BitmapUtils;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
public class MainActivity extends Activity {
private ViewPager mViewPager;
// 展现页面的json数据
private String mUrl = "http://zhihuibj.sinaapp.com/zhbj/10007/list_1.json";
/**解析Json封装为对象类*/
private TabData mTabDetailData;
// 头条新闻数据集合
private ArrayList<TopNewsData> mTopNewsList;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 控件
mViewPager = (ViewPager) findViewById(R.id.viewpager);
/** 从服务器获取Json数据 */
getDataFromServer();
}
/**
* 获取Json数据,并且解析为对象
*/
private void getDataFromServer() {
HttpUtils utils = new HttpUtils();
utils.send(HttpMethod.GET, mUrl, new RequestCallBack<String>() {
@Override
public void onSuccess(ResponseInfo<String> responseInfo) {
// 获取北京页面的Json数据
String result = (String) responseInfo.result;
Gson gson = new Gson();
//封装为对象类
mTabDetailData = gson.fromJson(result, TabData.class);
//获取对象类里面的图片属性
mTopNewsList = mTabDetailData.data.topnews;
//设置适配器
if (mTopNewsList != null) {
mViewPager.setAdapter(new TopNewsAdapter());
}
// 自动轮播条显示
if (mHandler == null) {
mHandler = new Handler() {
//处理消息
public void handleMessage(android.os.Message msg) {
//获取当前的页面
int currentItem = mViewPager.getCurrentItem();
//图片索引012 图片数量3 如果索引处于01,那么就切换到下一张,如果是2那么就切换到0
if (currentItem < mTopNewsList.size() - 1) {
currentItem++;
} else {
currentItem = 0;
}
mViewPager.setCurrentItem(currentItem);// 切换到下一个页面
mHandler.sendEmptyMessageDelayed(0, 3000);// 继续延时3秒发消息,
};
};
// 页面初始化,就延时3秒后发消息,让其接受消息,处理消息
mHandler.sendEmptyMessageDelayed(0, 3000);
}
}
@Override
public void onFailure(HttpException error, String msg) {
error.printStackTrace();
}
});
}
class TopNewsAdapter extends PagerAdapter {
private BitmapUtils utils;
public TopNewsAdapter() {
utils = new BitmapUtils(MainActivity.this);
// 设置默认图片
utils.configDefaultLoadingImage(R.drawable.topnews_item_default);
}
@Override
public int getCount() {
return mTabDetailData.data.topnews.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView image = new ImageView(MainActivity.this);
image.setScaleType(ScaleType.FIT_XY);// 基于控件大小填充图片
TopNewsData topNewsData = mTopNewsList.get(position);
utils.display(image, topNewsData.topimage);// 传递imagView对象和图片地址
container.addView(image);
image.setOnTouchListener(new TopNewsTouchListener());// 设置触摸监听
return image;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
class TopNewsTouchListener implements OnTouchListener {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
System.out.println("按下");
// 删除Handler中的所有消息
mHandler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_CANCEL:
System.out.println("事件取消");
mHandler.sendEmptyMessageDelayed(0, 3000);
break;
case MotionEvent.ACTION_UP:
System.out.println("抬起");
mHandler.sendEmptyMessageDelayed(0, 3000);
break;
default:
break;
}
return true;
}
}
}