ViewPage实现幻灯广告墙
功能简介
- 类似幻灯片功能
- 自动切换图片
- 触摸停止切换图片
- 自带标题功能和切换圆点
核心功能实现方法
1. 布局
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) { // 移除容器当中的View container.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.自己绘制圆点
总结
Handler
, ViewPage
, shape
,自定义适配器的使用。