*实现思路:
1.准备Banner所需要的图片资源
2.准备主页面(MainActivity)的布局
PS : 自己画滑动页面的小圆圈,写一个选择器
3.准备主页面的适配器
(继承自PagerAdapter)
4.在主界面中为ViewPager的滑动写切换事件
5.实现自动的切换页面,以及让小圆圈跟着滑动(用到的知识有: Handler)
1.主页面的布局
特别地:我们在这里采用了selector对于RadioButton的checked状态的选择
A.在Style文件中部署自定义的style.
<!--引用res/drawable/Selector(选择器)定义按钮的外观-->
<item name="android:button">@drawable/selector_radiobutton</item>
B.在drawable里面对选择器做样式的设计(画实心圆和空心圆)
Selector:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_circle_solid" android:state_checked="true"/>
<item android:drawable="@drawable/shape_circle_stroke" android:state_checked="false"/>
</selector>
Shape:
android:shape="oval"
>
A。<!--实心正圆-->
<size
android:width="10dp"
android:height="10dp"
/>
<solid android:color="#0f0"/
B。<!--空心正圆-->
<size
android:width="10dp"
android:height="10dp
/>
<stroke android:color="#0f0"
android:width="1dp"
/>
3.准备主页面的适配器(继承自PagerAdapter)
重写4个抽象方法
getCount()、 isViewFromObject()、
instantiateItem(){
ImageView iv = new ImageView(context);iv.setImageResource(imgs[position]);iv.setScaleType(ImageView.ScaleType.CENTER);
//这一句话很重要,有了才能把View加到ViewPager上
container.addView(iv);
return iv;
}
destoryItem(){
container.removeView((ImageView)object);
}
vp_banner.addOnPageChangeListener(new ViewPager.simpleOnPageChangeListener)(){
onPageSelected(int position){
//获得当前位置的RadioButton
RadioButton currRdo = rg.getChildAt(position);
}
});
4.在主界面中为ViewPager的滑动写切换事件
vp_banner.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
@Override
public void onPageSelected(int position) {
//获得当前位置的RadioButton
RadioButton currRdo = (RadioButton) rg.getChildAt(position);
//设置为选中
currRdo.setChecked(true);
}
});
5.实现自动的切换页面,以及让小圆圈跟着滑动
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
//获取消息,进行图片的自动切换
switch (msg.what){
case 1:
//获得当前的显示页面
int currItem = vp_banner.getCurrentItem();
//设置下一张页面的位置(利用求余的思想)
int position = (currItem+1)%imgs.length;
//设置当前要显示的页面
vp_banner.setCurrentItem(position);
//获得当前位置的RadioButton
RadioButton currRdo = (RadioButton) rg.getChildAt(position);
//设置为选中
currRdo.setChecked(true);
//每隔2s切换一张图片
sendEmptyMessageDelayed(1,2000);
break;
default:
break;
}
}
};
@Override
protected void onResume() {
super.onResume();
//用Handler来发送轮循广告的消息,一旦发送并接收到该消息,就自动切图片
handler.sendEmptyMessageDelayed(1,2000); //为了页面流畅
}