轮播图的简单实现
来源:互联网 发布:matlab2016a破解版mac 编辑:程序博客网 时间:2024/06/03 21:33
<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
前言: 天长地久。天地所以能长且久者,以其不自生,故能长生。是以圣人后其身而身先,外其身而身存。非以其无私邪?故能成其私。
有句话:不要重复的造轮子。但是如果我们连轮子怎么实现的都不知道,那就说不过去了。所以东西还是要去学习。这几天也把viewpager学习了一下,接下来做一个轮播图的实现过程,可能不是那么专业,只是个记录。
简单想一下,viewpager + handler(或者thread之类的线程)。无限轮播,解决了播放到最后,重复跳到第一页。有几点要注意
一、首先看pagerAdapter的四个函数
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:14px;">public MyAdapter(List<ImageView> pisc, String[] titles) {</span></span>
<span style="font-size:14px;"> this.pics = pisc; this.titles = titles; } @Override public int getCount() { if (pics != null) { return Integer.MAX_VALUE; // <span style="color: rgb(0, 153, 0);">返回一个没有边界的数值,用于无限轮播</span> } return 0; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { if (position < 0) { position = pics.size() + position; } View iv = pics.get(position % pics.size()); ViewGroup parent = (ViewGroup) iv.getParent(); if (parent != null) { parent.removeView(iv); // <span style="color: rgb(0, 153, 0);">这里容易出错,稍稍处理了一下</span> } container.addView(iv); return iv; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(pics.get(position % pics.size())); }</span>
二、设置viewpager
<span style="white-space:pre"></span><span style="font-size:14px;">arrayList = new int[]{R.mipmap.a, b, R.mipmap.c};</span>
<span style="font-size:14px;"> for (int i = 0; i < arrayList.length; i++) { ImageView iv = new ImageView(this); iv.setScaleType(ImageView.ScaleType.FIT_XY); iv.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 200)); iv.setImageResource(arrayList[i]); pics.add(iv);</span>
<span style="font-size:14px;"></span>
<span style="font-size:14px;"><span style="white-space:pre"></span> //以下是处理 指示器的小圆点,代码会在底部给出</span>
<span style="font-size:14px;"> View pointView = new View(this); pointView.setBackgroundResource(R.drawable.point_selector); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(15, 15); params.leftMargin = 5; pointView.setLayoutParams(params); pointView.setEnabled(false); ll.addView(pointView); } vp.setAdapter(new MyAdapter(pics, titles)); currentPos = Integer.MAX_VALUE / 2 + (Integer.MAX_VALUE / 2 % pics.size()); <span style="color:#009900;">//为了轮播图能够平稳的过度,让轮播图可以左右滑动。 </span></span>
<span style="font-size:14px;"><span style="color:#009900;"><span style="white-space:pre"></span>// 这里如果位置不对可试试 减号。</span> vp.setCurrentItem(currentPos); ll.getChildAt(0).setEnabled(true); cirPicHandler.sendEmptyMessageDelayed(MSG_UPDATE, MSG_DELAY); // 开始发送消息轮播</span>
<span style="font-size:14px;">public Handler cirPicHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_UPDATE: // 更新 currentPos++; vp.setCurrentItem(currentPos); cirPicHandler.sendEmptyMessageDelayed(MSG_UPDATE, MSG_DELAY); break; case MSG_STOP://停止 break; case MSG_RESUME://重新开始 cirPicHandler.sendEmptyMessageDelayed(MSG_UPDATE, MSG_DELAY); break; case MSG_PAGE://记录当前的位置 currentPos = msg.arg1; break; } } };</span>
四、viewpager的事件处理
<span style="font-size:14px;">vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { ll.getChildAt((position - 1) % arrayList.length).setEnabled(false);//回复上一点 ll.getChildAt(position % arrayList.length).setEnabled(true); //选中当前点 cirPicHandler.sendMessage(Message.obtain(cirPicHandler, MSG_PAGE,position,0)); } @Override public void onPageScrollStateChanged(int state) { switch (state) { case ViewPager.SCROLL_STATE_DRAGGING: cirPicHandler.sendEmptyMessage(MSG_STOP); //拖动的时候 什么也不处理 break; case ViewPager.SCROLL_STATE_IDLE: break; } } });</span>
五、小圆点的绘制
1.point_enable
<span style="font-size:14px;"><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:width="10dp" android:height="10dp" /> <solid android:color="#88ffffff" /> <padding android:left="2dp"/></shape></span>2.point_normal
<span style="font-size:14px;"><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:height="10dp" android:width="10dp"/> <corners android:radius="5dp"/> <solid android:color="#33000000"/></shape></span>
3.写一个selector:point_selector
<span style="font-size:14px;"><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="false" android:drawable="@drawable/points_normal"/> <item android:state_enabled="true" android:drawable="@drawable/point_enable"/></selector></span>
至此全部的内容完毕,个人觉得处理时不会让用Integer.MAX_VALUE这个属性,怎么让轮播如左右都可以滑动。
0 0
- 轮播图的简单实现
- 简单轮播图的实现
- 简单的轮播图效果实现
- 杀毒软件的简单实现的简单实现
- 用js实现简单的网页轮播图
- Android最简单的轮播图实现
- android基础-----ViewPager实现简单的轮播图
- 闲着没事 一个简单的轮播图实现
- android 简单的轮播图效果实现
- vue2.0实现一个简单的轮播图
- 用JQ实现的简单轮播图
- JavaScript代码实现简单的轮播图效果
- Android 轮播图Banner的简单实现
- 使用javascript实现简单的轮播图效果
- vue2.0实现一个简单的轮播图
- 简单的实现轮播图和RecyclerView效果
- 杀毒软件的简单实现
- 俄罗斯方块的简单实现
- 【codeforces 725C】C. Hidden Word【字符串构造】
- 一次完整的HTTP请求
- SDUTACM 数据结构实验之串二:字符串匹配
- 洛谷 P1800 software_NOI导刊2010提高(06)(二分答案+DP检验)
- cocoa pods的简单使用
- 轮播图的简单实现
- Android ListView 实现分批加载
- 云计算读书笔记0:云计算简介
- hdu 2136 Largest prime factor(素数打表)
- C# Dictionary用法总结
- C++ 虚函数表解析
- poj_3041 Asteroids(匈牙利算法+最小点覆盖)
- 3. 笔试题---苏州绿控
- 关于Java你应该掌握的基础知识—银行笔试必考(作者亲生经历的java试题)