package com.itheima.viewpagetest;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.preference.PreferenceActivity.Header;
import android.app.Activity;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
public class MainActivity extends Activity implements OnPageChangeListener{
private ViewPager viewpager;
private TextView tv_Imager;
private int[] imagerIDs;
private String[] texts;
private List<ImageView> imagelist;
private LinearLayout llayout;
private View v;
private int index=0;
private boolean falg=true;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
//设置当前显示的第几张图片:获取当前显示的item+1
viewpager.setCurrentItem(viewpager.getCurrentItem()+1);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
new Thread(new Runnable(){
@Override
public void run() {
//在子线程中循环发送消息到handler来实现循环轮播墙
while(falg){
SystemClock.sleep(2000);
handler.sendEmptyMessage(0);
}
}
}).start();
}
private void init() {
viewpager = (ViewPager) findViewById(R.id.viewpager);
tv_Imager = (TextView) findViewById(R.id.tv_Imager);
llayout=(LinearLayout) findViewById(R.id.llayout); //文字下面的点
//文字 及 图片的数组
texts = getImageDescription();
imagerIDs = getImageIDs();
//存储图片的集合
imagelist=new ArrayList<ImageView>();
//设置点的大小 及margin 间隔
LayoutParams params = new LayoutParams(5, 5);
params.leftMargin=5;
ImageView image;
for (int i = 0; i < imagerIDs.length; i++) {
image=new ImageView(this);
//设置轮播的图片
image.setBackgroundResource(imagerIDs[i]);
imagelist.add(image); //将图片添加到集合
v = new View(this);
v.setBackgroundResource(R.drawable.point_background); //设置点当前显示的背景
v.setLayoutParams(params);
v.setEnabled(false);
llayout.addView(v);
}
viewpager.setAdapter(new MyAdapter());
//获取当前要显示的第几张图片
int item=Integer.MAX_VALUE / 2;
item=item - (item % imagelist.size());
viewpager.setCurrentItem(item);//设置当前显示的item
viewpager.setOnPageChangeListener(this); //设置图片的监听事件
llayout.getChildAt(item % imagelist.size()).setEnabled(true);//将当前的小圆点设置为对应的图片位置
tv_Imager.setText(texts[item % imagelist.size()]); //对应 的文本
index=item % imagelist.size(); //当前所显示的下标索引
}
class MyAdapter extends PagerAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return Integer.MAX_VALUE; //要实现循环所以设置了一个比较大的值
}
/**
* 当在滑动中的View对象和进来的对象是否是同一个对像,放回true和false
*/
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0==arg1;
}
/**
* position对象的是将要销毁的下标
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
viewpager.removeView(imagelist.get(position % imagelist.size()));
}
@Override//当前图片ImageView
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
viewpager.addView(imagelist.get(position % imagelist.size()));
return imagelist.get(position % imagelist.size());
}
}
public int[] getImageIDs() {
return new int[] {
R.drawable.a,
R.drawable.b,
R.drawable.c,
R.drawable.d,
R.drawable.e
};
}
public String[] getImageDescription() {
return new String[]{
"巩俐不低俗,我就不能低俗",
"扑树又回来啦!再唱经典老歌引万人大合唱",
"揭秘北京电影如何升级",
"乐视网TV版大派送",
"热血屌丝的反杀"
};
}
//图片被选中时的监听事件方法:
@Override//滑动状态改变时执行的方法
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override// 图片滑动时执行的方法
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override//页面被选中时改变状态
public void onPageSelected(int parseme) {
// TODO Auto-generated method stub
int position=parseme % imagelist.size();
tv_Imager.setText(texts[position]);
llayout.getChildAt(position).setEnabled(true);
llayout.getChildAt(index).setEnabled(false);
index=position;
}
}
布局文件:
<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=".MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="200dip" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/viewpager"
android:background="#33000000"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_Imager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="sdfdsf"
android:textColor="@android:color/white" />
<LinearLayout
android:id="@+id/llayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="5dip"
android:orientation="horizontal" >
</LinearLayout>
</LinearLayout>
</RelativeLayout>
小圆点背景:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_enabled="true" android:drawable="@drawable/point_enable"></item>
<item android:state_enabled="false" android:drawable="@drawable/point_normal"></item>
</selector>
不同的圆点:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
>
<corners android:radius="0.5dip"/>
<solid android:color="#55000000"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval"
>
<corners android:radius="0.5dip"/>
<solid android:color="#aaFFFFFF"/>
</shape>