android:ViewPager自动轮播图(简单版)
来源:互联网 发布:苹果电脑删除mac系统 编辑:程序博客网 时间:2024/05/13 07:21
实现原理:使用ViewPager每个Pager就是一个ImageView,里面只有一张图片;
整个布局是一个相对布局,下面标题和指示点是一个线性布局;
给ViewPager设置一个页面改变的监听,当页面改变的时候让标题根据position改变标题内容;
指示点同原理;
首先是布局:
<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="230dp" tools:context="com.example.a.myviewpager.MainActivity"> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:layout_alignParentBottom="true" android:layout_width="match_parent" android:layout_height="45dp" android:background="#80000000" android:orientation="vertical" android:gravity="center"> <TextView android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView" android:text="新浪微博:搏击爱好者" android:textColor="#ffffff" /> <LinearLayout android:gravity="center" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/ll" android:orientation="horizontal"> </LinearLayout> </LinearLayout></RelativeLayout>
activity代码:
private ViewPager mViewPager; private TextView mTextView; private LinearLayout ll; //图片的id private int[] imageIds={R.mipmap.a,R.mipmap.b,R.mipmap.c,R.mipmap.d,R.mipmap.e}; // 图片对应的标题 private final String[] imageTitleTexts = { "天生一对++新浪微博:搏击爱好者Z", "扑树又回来啦++新浪微博:搏击爱好者Z", "刘德华++新浪微博:搏击爱好者Z", "源代码++新浪微博:搏击爱好者Z", "饭局++新浪微博:搏击爱好者Z" }; //是否开始自动滑动 private boolean isRunning=false; private int lastPoint=0; private List<ImageView> imageViewList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViewData(); } private void initViewData() { mViewPager= (ViewPager) findViewById(R.id.viewPager); mTextView= (TextView) findViewById(R.id.textView); ll= (LinearLayout) findViewById(R.id.ll); mTextView.setText(imageTitleTexts[0]); imageViewList=new ArrayList<ImageView>(); for (int x=0 ; x<imageIds.length ; x++ ){ ImageView imageView = new ImageView(this); imageView.setBackgroundResource(imageIds[x]); imageViewList.add(imageView); //添加指示点 ImageView ivPoint=new ImageView(this); if(x==0){ ivPoint.setBackgroundResource(R.drawable.point_select); }else { ivPoint.setBackgroundResource(R.drawable.point_no); } //给指示点设置间距 LinearLayout.LayoutParams layoutParams =new LinearLayout.LayoutParams(-2, -2); layoutParams.leftMargin=20; ll.addView(ivPoint,layoutParams); } adapter=new MyViewPagerAdapter(); mViewPager.setAdapter(adapter); mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { /** * 当页面发生改变时调用 * @param position */ @Override public void onPageSelected(int position) { //同样道理和instantiateItem()一样 position=position % imageIds.length; mTextView.setText(imageTitleTexts[position]); //让指示点给着变化 ll.getChildAt(lastPoint).setBackgroundResource(R.drawable.point_no); ll.getChildAt(position).setBackgroundResource(R.drawable.point_select); lastPoint=position; } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } }); //这个必须设置,用最大数除2是得到中间数,这样无论向左还是向右都可以一直滑动; //如果设置为Integer.MAX_VALUE/2 可能打开activity轮播图不是从第一张开始;所以需要减去余数 mViewPager.setCurrentItem(Integer.MAX_VALUE/2 - Integer.MAX_VALUE % imageIds.length); isRunning=true; handler.sendEmptyMessageDelayed(99,2000); } private Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { if(isRunning==true){ mViewPager.setCurrentItem(mViewPager.getCurrentItem()+1); handler.sendEmptyMessageDelayed(99,2000); } } }; private MyViewPagerAdapter adapter; class MyViewPagerAdapter extends PagerAdapter{ @Override public int getCount() { //为了让viewpager可以一直向两边滑动,这里设置一个最大值; return Integer.MAX_VALUE; } @Override public Object instantiateItem(ViewGroup container, int position) { //当上面的return改变为最大数的时候,这里的position就是最大数了,所以必须取余数,不然就会报错 position=position % imageViewList.size(); ImageView iv=imageViewList.get(position); container.addView(iv); return iv; } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } @Override protected void onDestroy() { isRunning=false; super.onDestroy(); }
源码下载地址:
http://download.csdn.net/detail/zheng_jiao/9510699
0 0
- android:ViewPager自动轮播图(简单版)
- ViewPager自动轮播图
- ViewPager自动轮播
- ViewPager自动轮播
- viewpager自动轮播
- viewpager自动轮播
- Android复习之旅--ViewPager(自动轮播条)
- Android实现ViewPager自动轮播
- Android 自动轮播的Viewpager
- android之自动轮播的ViewPager
- Android ViewPager无限自动轮播
- viewPager 实现banner图 自动轮播
- ViewPager自动轮播(获取网络资源)
- 自动轮播的viewpager
- ViewPager无限自动轮播
- HttpClient+ViewPager自动轮播
- VIewPager实现自动轮播
- ViewPager无限自动轮播
- Javascript函数----操作DOM文档对象模型
- 13个大数据应用案例
- Node.js express NPM start error, Exit Status 8
- Activity深入学习(1)生命周期
- 卡特兰数
- android:ViewPager自动轮播图(简单版)
- 用PHP将网页上的Canvas图像保存到服务器上的方法
- LeetCode 256. Paint House
- IOS消息定时推送(JAVAWEB)
- 489 - Hangman Judge
- LeetCode 017 Letter Combinations of a Phone Number
- HTML5新特性之Geolocation
- 关于UIView用户交互相关的属性和方法
- Apache主配置文件httpd.conf 详解