ViewPager无限自动轮播
2016-04-18 19:49
316 查看
布局中的实现代码
//主类中的实现代码
我们需要在res目录下创建一个名为drawable的文件夹
select.xml中的实现代码这个是选择图片的
true_123.xml中的实现代码 选中状态下RadioButton的宽高和颜色
false_.xml中的实现代码 选中状态下RadioButton的宽高和颜色
运行的效果展示:可以实现无限自动轮播
<RelativeLayout 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="com.example.radiobutto.MainActivity" > <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="fill_parent" android:layout_height="fill_parent"> </android.support.v4.view.ViewPager> <LinearLayout android:id="@+id/ll_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="500dp" android:layout_centerHorizontal="true" android:orientation="horizontal"> </LinearLayout> </RelativeLayout>
//主类中的实现代码
import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RadioButton; import android.widget.LinearLayout.LayoutParams; public class MainActivity extends Activity{ private ViewPager viewpager; private LinearLayout line; private int image[]=new int[]{R.drawable.aaa,R.drawable.bbb,R.drawable.ccc}; private List<View> list; // 上一个指示点的下标 private int lastPointIndex=0; //这个是实现自动轮播的功能 定义一个线程 发送一个请求 Handler handler=new Handler(){ public void handleMessage(android.os.Message msg) { //获得当前页面的current号 int currentItem = viewpager.getCurrentItem(); viewpager.setCurrentItem(currentItem+=1); handler.sendEmptyMessageDelayed(1, 2000);//需要有延迟 就是每三秒就换一张页面 }; }; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(); //初始化数据 initData(); //为ViewPager添加适配器 setvpAdapter(); viewpager.setCurrentItem(Integer.MAX_VALUE/2); handler.sendEmptyMessageDelayed(1, 2000); setShapePoint(); } private void setShapePoint() { for (int i = 0; i <image.length; i++) { // 创建指示点 RadioButton radio = new RadioButton(MainActivity.this); // 设置指示点的背景 radio.setBackgroundResource(R.drawable.select); // 得到布局设置参数的对象,该对象的类型取决于当前view的父view LayoutParams layoutParams = new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); // 设置指示点的间距,当前设置的是到左边控件的距离 layoutParams.leftMargin = 15; // 给指示点设置参数 radio.setLayoutParams(layoutParams); // 把imageView装进linearLayout布局中 line.addView(radio); // 设置指示点的初始状态,当指示点是第一个的时候,设置成选中状态,其余的都是不选中 if (i == 0) { radio.setEnabled(true); } else { radio.setEnabled(false); } } viewpager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { int index = arg0 % image.length; // 通过角标,得到linearLayout的子控件,设置当前指示点的选择状态 line.getChildAt(index).setEnabled(true); // 设置上一个指示点的选择状态 line.getChildAt(lastPointIndex).setEnabled(false); // 记录上一个角标位置 lastPointIndex = index; } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); } private void setvpAdapter() { viewpager.setAdapter(new PagerAdapter() { @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public int getCount() { return Integer.MAX_VALUE;//无限轮播 } @Override public Object instantiateItem(ViewGroup container, int position) { if (list.get(position%image.length).getParent()!=null) { container.removeView(list.get(position%image.length)); } container.addView(list.get(position%image.length)); return list.get(position%image.length); } @Override public void destroyItem(ViewGroup container, int position, Object object) { } }); } private void initData() { list = new ArrayList<View>(); for (int i = 0; i < image.length; i++) { ImageView imageView = new ImageView(MainActivity.this); imageView.setImageResource(image[i]); list.add(imageView); } } private void findViewById() { // 获得控件的id viewpager = (ViewPager) findViewById(R.id.viewpager); line = (LinearLayout) findViewById(R.id.ll_layout); } }
我们需要在res目录下创建一个名为drawable的文件夹
select.xml中的实现代码这个是选择图片的
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_enabled="true" android:drawable="@drawable/true_123"></item> <item android:state_enabled="false" android:drawable="@drawable/false_"></item> </selector>
true_123.xml中的实现代码 选中状态下RadioButton的宽高和颜色
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:width="10dp" android:height="10dp"/> <solid android:color="#000000"/> </shape>
false_.xml中的实现代码 选中状态下RadioButton的宽高和颜色
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:width="10dp" android:height="10dp"/> <solid android:color="#808080"/> </shape>
运行的效果展示:可以实现无限自动轮播
相关文章推荐
- TOYS--POJ2318
- <松本行弘的程序世界> 读书笔记
- 离散化+线段树 codefores555C Case of Chocolate
- uva 10304 - Optimal Binary Search Tree(区间dp)
- Linux操作提示:“Cant open file for writing”或“operation not permitted”的解决办法
- 嵌入式平台下的ldd
- CPU acceleration status:HAXM must be updated(version 1.1.1<6.0.1)
- 获得执行jar的运行路径
- 中国大陆CDN的测量与分析
- Labview队列操作
- hdu 1142 最短路径+dfs记忆化搜索
- 【小笨鸟看JDK1.7集合源码之一】JAVA集合整体框架
- codeforces_304C_数学题
- iOS:实现图片的无限轮播之使用第三方库SDCycleScrollView
- subline的node.js安装和快捷键
- 解决android-Ultra-Pull-To-Refresh 和ViewPager冲突的问题
- 结对编程
- LeetCode|Majority Element *
- 不用工具就可以在虚拟机安好系统后,并只有c盘的情况下增加分区
- 图结构练习——最小生成树