## 布局文件 ##
xml布局文件activity_main中
<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="120dip"
tools:context="${relativePackage}.${activityClass}" >
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/ll_doc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" >
</LinearLayout>
</RelativeLayout>
ViewPager布局文件
<?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" >
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
## 两个小圆点的自定义图形 ##
选中状态自定义
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<corners android:radius="8dip"/>
<solid android:color="#f00"/>
</shape>
未选中状态自定义
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<corners android:radius="8dip"/>
<solid android:color="#330000ff"/>
</shape>
## 后台代码,主界面代码中 ##
public class MainActivity extends Activity {
private ViewPager vp;
private LinearLayout ll_doc;
private ArrayList<String> listPath;
private ArrayList<ImageView> listImg;
private String path = "http://www.meirixue.com/api.php?c=index&a=index";
private Handler handler = new Handler () {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 0:
initDoc();
vp.setAdapter(new MyAdapter(MainActivity.this, handler, listPath));
vp.setCurrentItem(1000);
handler.sendEmptyMessageDelayed(1, 1500);
viewPagerListner();
break;
case 1:
int position = vp.getCurrentItem();
position += 1;
vp.setCurrentItem(position);
handler.sendEmptyMessageDelayed(1, 1500);
break;
default:
break;
}
};
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
private void initView(){
vp = (ViewPager) findViewById(R.id.vp);
ll_doc = (LinearLayout) findViewById(R.id.ll_doc);
listPath = new ArrayList<String>();
listImg = new ArrayList<ImageView>();
}
private void initData(){
new Thread(){
public void run() {
try {
URL url = new URL(path);
HttpURLConnection connect = (HttpURLConnection) url.openConnection();
connect.setRequestMethod("GET");
connect.setConnectTimeout(5000);
connect.setReadTimeout(8000);
if (connect.getResponseCode() == 200) {
BufferedReader read = new BufferedReader(new InputStreamReader(connect.getInputStream()));
StringBuffer sbf = new StringBuffer();
String str = null;
while ( (str=read.readLine()) != null ) {
sbf.append(str);
}
JSONObject root = new JSONObject(sbf.toString());
JSONObject data = root.optJSONObject("data");
JSONArray adlist = data.optJSONArray("adlist");
for (int i=0; i<adlist.length(); i++) {
JSONObject obj = adlist.optJSONObject(i);
String s = obj.optString("img");
Log.d("tag", s);
listPath.add(s);
}
}
handler.sendEmptyMessage(0);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
};
}.start();
}
private void initDoc(){
if (listImg != null) {
listImg.clear();
}
for (int i=0; i<listPath.size(); i++) {
ImageView image = new ImageView(MainActivity.this);
if (i == 0) {
image.setImageResource(R.drawable.doc_seleted);
} else {
image.setImageResource(R.drawable.doc_default);
}
LayoutParams params = new LayoutParams(20, 20);
params.setMargins(5, 0, 5, 0);
listImg.add(image);
ll_doc.addView(image, params);
}
}
private void viewPagerListner(){
vp.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
for (int i=0; i<listImg.size(); i++) {
if (i == arg0%listImg.size()) {
listImg.get(i).setImageResource(R.drawable.doc_seleted);
} else {
listImg.get(i).setImageResource(R.drawable.doc_default);
}
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
}
## ViewPager适配器实现 ##
public class MyAdapter extends PagerAdapter{
private Context context;
private Handler handler;
private ArrayList<String> list;
public MyAdapter(Context context, Handler handler, ArrayList<String> list) {
super();
this.context = context;
this.handler = handler;
this.list = list;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = View.inflate(context, R.layout.item, null);
ImageView image = (ImageView) view.findViewById(R.id.image);
image.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_POINTER_UP:
handler.sendEmptyMessageDelayed(1, 1500);
break;
case MotionEvent.ACTION_CANCEL:
handler.sendEmptyMessageDelayed(1, 1500);
break;
default:
break;
}
return true;
}
});
ImageLoader.getInstance().displayImage(list.get(position%list.size()), image);
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}