这是为了记录自己写的模块化代码 以后好用 直接用
首先当然啥布局界面用到ViewPager这个控件,这是v4包下面的 如果你项目报错则首先看看导没导v4包
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<!-- ViewPager是一个控件 -->
<android.support.v4.view.ViewPager
android:id="@+id/adv_pager"
android:layout_width="fill_parent"
android:layout_height="160dp" >
</android.support.v4.view.ViewPager>
<LinearLayout 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">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<!-- ViewPager是一个控件 -->
<android.support.v4.view.ViewPager
android:id="@+id/adv_pager"
android:layout_width="fill_parent"
android:layout_height="160dp" >
</android.support.v4.view.ViewPager>
<!-- 广告页下面点点->
<LinearLayout
android:id="@+id/viewGroup"
android:layout_below="@id/adv_pager"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-25px"
android:gravity="right"
android:orientation="horizontal" >
</LinearLayout>
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/viewGroup"
android:layout_below="@id/adv_pager"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="-25px"
android:gravity="right"
android:orientation="horizontal" >
</LinearLayout>
</RelativeLayout>
</LinearLayout>
其次主界面代码 后面都会有详细的注释 关键地方我会解释 虽然有时候解释的不是很清楚
public class MainActivity extends AppCompatActivity {
//存放轮播图小圆点的数组
private ImageView[] imageViews = null;
private ImageView[] imageViews = null;
//轮播图片的imageView
private ImageView imageView = null;
private ImageView imageView = null;
//放轮播图片的容器ViewPager
private ViewPager advPager = null;
private ViewPager advPager = null;
private AtomicInteger what = new AtomicInteger(0);
private boolean isContinue = true;
// 这里存放的是四张广告背景
List<View> advPics = new ArrayList<View>();
private EditText edit_query;
private TextView text;
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化ViewPager
initViewPager();
}
private void initViewPager() {
//得到控件
advPager= (ViewPager) findViewById(R.id.adv_pager);
ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);
//有几张图片就几个view
ImageView img1 = new ImageView(this);
img1.setBackgroundResource(R.drawable.tu1);
advPics.add(img1);
ImageView img2 = new ImageView(this);
img2.setBackgroundResource(R.drawable.tu2);
advPics.add(img2);
ImageView img3 = new ImageView(this);
img3.setBackgroundResource(R.drawable.tu3);
advPics.add(img3);
ImageView img4 = new ImageView(this);
img4.setBackgroundResource(R.drawable.tu4);
advPics.add(img4);
// 对imageviews进行填充
imageViews = new ImageView[advPics.size()];
//小图标
for (int i = 0; i < advPics.size(); i++) {
imageView = new ImageView(this);
imageView.setLayoutParams(new ViewGroup.LayoutParams(20, 20));
imageView.setPadding(5, 5, 5, 5);
imageViews[i] = imageView;
if (i == 0) {
imageViews[i]
.setBackgroundResource(R.drawable.dian);
} else {
imageViews[i]
.setBackgroundResource(R.drawable.dian1);
}
group.addView(imageViews[i]);
}
advPager= (ViewPager) findViewById(R.id.adv_pager);
ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);
//有几张图片就几个view
ImageView img1 = new ImageView(this);
img1.setBackgroundResource(R.drawable.tu1);
advPics.add(img1);
ImageView img2 = new ImageView(this);
img2.setBackgroundResource(R.drawable.tu2);
advPics.add(img2);
ImageView img3 = new ImageView(this);
img3.setBackgroundResource(R.drawable.tu3);
advPics.add(img3);
ImageView img4 = new ImageView(this);
img4.setBackgroundResource(R.drawable.tu4);
advPics.add(img4);
// 对imageviews进行填充
imageViews = new ImageView[advPics.size()];
//小图标
for (int i = 0; i < advPics.size(); i++) {
imageView = new ImageView(this);
imageView.setLayoutParams(new ViewGroup.LayoutParams(20, 20));
imageView.setPadding(5, 5, 5, 5);
imageViews[i] = imageView;
if (i == 0) {
imageViews[i]
.setBackgroundResource(R.drawable.dian);
} else {
imageViews[i]
.setBackgroundResource(R.drawable.dian1);
}
group.addView(imageViews[i]);
}
//设置适配器,就把它写一个类里面,按理 应该分开这样解耦性比较好
advPager.setAdapter(new AdvAdapter(advPics));
advPager.setAdapter(new AdvAdapter(advPics));
//设置ViewPager监听事件
advPager.addOnPageChangeListener(new GuidePageChangeListener());
advPager.addOnPageChangeListener(new GuidePageChangeListener());
//设置ViewPager触摸监听
advPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
isContinue = false;
break;
case MotionEvent.ACTION_UP:
isContinue = true;
break;
default:
isContinue = true;
break;
}
return false;
}
});
advPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
isContinue = false;
break;
case MotionEvent.ACTION_UP:
isContinue = true;
break;
default:
isContinue = true;
break;
}
return false;
}
});
//开启个线程,使它可以自动轮播,可设置自动轮播时间
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
if (isContinue) {
viewHandler.sendEmptyMessage(what.get());
whatOption();
}
}
}
}).start();
}
private void whatOption() {
what.incrementAndGet();
if (what.get() > imageViews.length - 1) {
what.getAndAdd(-4);
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
}
private final Handler viewHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
advPager.setCurrentItem(msg.what);
super.handleMessage(msg);
}
};
private class AdvAdapter extends PagerAdapter {
private List<View>list;
public AdvAdapter(List<View> list) {
this.list = list;
}
// 获取要滑动的控件的数量,在这里我们以滑动的广告栏为例,那么这里就应该是展示的广告图片的ImageView数量
@Override
public int getCount() {
return list.size();
}
// 来判断显示的是否是同一张图片,这里我们将两个参数相比较返回即可
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
// 当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化,我们将要显示的ImageView加入到ViewGroup中,然后作为返回值返回即可
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(list.get(position),0);
return list.get(position);
}
// PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(list.get(position));
}
}
private class GuidePageChangeListener implements ViewPager.OnPageChangeListener {
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
if (isContinue) {
viewHandler.sendEmptyMessage(what.get());
whatOption();
}
}
}
}).start();
}
private void whatOption() {
what.incrementAndGet();
if (what.get() > imageViews.length - 1) {
what.getAndAdd(-4);
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
}
}
private final Handler viewHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
advPager.setCurrentItem(msg.what);
super.handleMessage(msg);
}
};
private class AdvAdapter extends PagerAdapter {
private List<View>list;
public AdvAdapter(List<View> list) {
this.list = list;
}
// 获取要滑动的控件的数量,在这里我们以滑动的广告栏为例,那么这里就应该是展示的广告图片的ImageView数量
@Override
public int getCount() {
return list.size();
}
// 来判断显示的是否是同一张图片,这里我们将两个参数相比较返回即可
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
// 当要显示的图片可以进行缓存的时候,会调用这个方法进行显示图片的初始化,我们将要显示的ImageView加入到ViewGroup中,然后作为返回值返回即可
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(list.get(position),0);
return list.get(position);
}
// PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(list.get(position));
}
}
private class GuidePageChangeListener implements ViewPager.OnPageChangeListener {
//当页面在滑动的时候会调用此方法,在滑动被停止之前,此方法回一直得到,其中三个参数分别代表,(当前页面,及你点击滑动的页面),
://(当前页面偏移的百分比)-----(当前页面偏移的像素位置)
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
// 此方法是页面跳转完后得到调用,position是你当前选中的页面的Position(位置编号)。
@Override
public void onPageSelected(int position) {
what.addAndGet(position);
for (int i = 0; i < imageViews.length; i++) {
imageViews[position]
.setBackgroundResource(R.drawable.dian);
if (position != i) {
imageViews[i]
.setBackgroundResource(R.drawable.dian1);
}
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
// 此方法是页面跳转完后得到调用,position是你当前选中的页面的Position(位置编号)。
@Override
public void onPageSelected(int position) {
what.addAndGet(position);
for (int i = 0; i < imageViews.length; i++) {
imageViews[position]
.setBackgroundResource(R.drawable.dian);
if (position != i) {
imageViews[i]
.setBackgroundResource(R.drawable.dian1);
}
}
}
//此方法是在状态改变的时候调用,其中这个int值,有三种状态,0的时候什么也没做,1的时候正在滑动,2的时候滑动完毕
@Override
public void onPageScrollStateChanged(int state) {
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
}