ViewPage实现幻灯广告墙
功能简介
- 类似幻灯片功能
- 自动切换图片
- 触摸停止切换图片
- 自带标题功能和切换圆点
核心功能实现方法
1. 布局
<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="wrap_content" android:orientation="vertical" >
<FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" >
<android.support.v4.view.ViewPager android:id="@+id/vp_text" android:layout_width="match_parent" android:layout_height="170dp" />
<!-- 小圆点的布局文件 -->
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="#a000" android:orientation="vertical">
<TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:text="标题" android:textColor="#fff" android:textSize="18sp" />
<LinearLayout android:id="@+id/ll_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal"></LinearLayout>
</LinearLayout>
</FrameLayout>
</LinearLayout>
2. ViewPage
自定义适配器
/*** ViewPage适配器而已*/ class myAdatper extends PagerAdapter {
@Override public int getCount() { return count;}
/*** 确定是否展示和反对的是否是同一个对象*/ @Override public boolean isViewFromObject(View view, Object object) { return view == object;}
/*** 添加机制。*/ @Override public Object instantiateItem(ViewGroup container, int position) {ImageView view = new ImageView(getApplicationContext());view.setImageResource(mImage[position % mImage.length]); // view.setBackgroundResource(resid) //填充父控件container.addView(view); return view;}
/*** 独特的销毁机制 , 控制内存方式, 用语默认只加载3个页面*/ @Override public void destroyItem(ViewGroup container, int position, Object object) { // 移除容器当中的Viewcontainer.removeView((ImageView) object);}}
3. helder
消息,实现自动切换功能
这里原理是我们可以通过handler.sendEmptyMessageDelayed(0, 2000)
发送延时消息,通过handleMessage
接受后,再次发送,类似递归功能。触摸停止使用handler.removeCallbacksAndMessages(null)
移除所有消息队列里面的消息实现停止轮播
Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { // 自动跟换轮播图片 int currentItem = vpteach.getCurrentItem();currentItem++;
vpteach.setCurrentItem(currentItem);handler.sendEmptyMessageDelayed(0, 2000);};};
4. 触摸取消切换
//设置 触摸停止滚动vpteach.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_UP:handler.sendEmptyMessageDelayed(0, 2000); break; default: break;}
return false;}});
5. 文字和圆点跟踪变换
这里主要是使用监听ViewPage
的setOnPageChangeListener
事件,来改变TextView
文本当中文字
// 滑动更新标题。 。vpteach.setOnPageChangeListener(new OnPageChangeListener(){ // 某一页页被选中时 @Override public void onPageSelected(int position) { // 滑动设置简介。 int index = position % mImageDes.length;tvTitle.setText(mImageDes[index]);ll_contaier.getChildAt(index).setEnabled(true);
ll_contaier.getChildAt(prePosation).setEnabled(false);prePosation = index;
}
// 滑动是调用 @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
// 滑动状态改变时。 @Override public void onPageScrollStateChanged(int state) {
}});
6.自己绘制圆点
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="ring"> <size android:width="5dp" android:height="5dp"/> <!-- 圆点原色 --> <solid android:color="#CD6090" /></shape>
总结
Handler
, ViewPage
, shape
,自定义适配器的使用。
以后自己复习中多注意他们之间的联系可以实现的功能。
效果
时间: 2024-10-12 23:25:21