Android ViewPager实现轮播图效果

发布时间 - 2026-01-10 23:08:04    点击率:

本文实例为大家分享了Android ViewPager实现轮播图效果的具体代码,供大家参考,具体内容如下

先上一张效果图:

说到ViewPager实现轮播图效果,那么肯定会用到PagerAdapter,下面先介绍下这个类。

PagerAdapter简介

PagerAdapter是Android.support.v4包中的类,是一个抽象类,直接继承于Object,导入包android.support.v4.view.PagerAdapter即可使用。

PagerAdapter主要是viewpager的适配器,而viewPager则也是在android.support.v4扩展包中新添加的一个强大的控件,可以实现控件的滑动效果,比如咱们在软件中常见的广告栏的滑动效果,用viewPager就可以实现。今天主要介绍如何使用viewPagr并重写PagerAdapter实现常见广告栏的滑动效果。

既然是个抽象类,那么我们新建一个类去继承它,重写四个方法:

 1.public Object instantiateItem(ViewGroup container, int position)

 2.public void destroyItem(ViewGroup container, int position, Object object)

 3.public int getCount()

 4.public boolean isViewFromObject(View arg0, Object arg1)

MyViewPagerAdapter类:

public class MyViewPagerAdapter extends PagerAdapter {

private List<ImageView> mList;

public MyViewPagerAdapter(List<ImageView> mList){

 this.mList=mList;

}
//当要显示的图片进行缓存时,会调用这个方法进行显示图片的初始化
//我们将要显示的ImageView加入到ViewGroup中

public Object instantiateItem(ViewGroup container, int position) {
 // TODO Auto-generated method stub
 container.addView(mList.get(position));

 return mList.get(position);

}

@Override
//PagerAdapter只缓存三张要显示的图片,如果滑动的图片超出了缓存的范围,就会调用这个方法,将图片销毁
public void destroyItem(ViewGroup container, int position, Object object) {
 // TODO Auto-generated method stub
 container.removeView(mList.get(position));
}
//获取要滑动的控件的数量,
public int getCount() {
 // TODO Auto-generated method stub
 return mList.size();
}

//来判断显示的是否是同一张照片,这个我们将两个图片对比 再返回
public boolean isViewFromObject(View arg0, Object arg1) {
 // TODO Auto-generated method stub
 return arg0==arg1;
}

}

activity_main.xml:

<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" >

<android.support.v4.view.ViewPager
 android:id="@+id/vp"
 android:layout_width="match_parent"
 android:layout_height="200dp" />

<LinearLayout
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_alignBottom="@id/vp"
 android:background="#33000000"
 android:orientation="vertical"
 android:paddingBottom="10dp" >

 <LinearLayout
 android:id="@+id/ll_points"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:gravity="center_horizontal"
 android:orientation="horizontal"
 android:paddingBottom="10dp" >
 </LinearLayout>
</LinearLayout>

</RelativeLayout>

MainActivity:

public class MainActivity extends Activity {

private ViewPager mVp;
//private TextView tvTitle;
private LinearLayout llPoints;
//private String[] titles;// 存放所有要显示的标题
private int[] images;// 存放所有要显示的图片资源id
private List<ImageView> list=new ArrayList<ImageView>();;// 存放要显示在ViewPager对象中的所有Imageview对象
private int prevPosition = 0;

private Handler handler = new Handler() {

 @SuppressLint("HandlerLeak") 
 public void handleMessage(android.os.Message msg) {

 switch (msg.what) {
 case 0:
  // 得到mvp当前页面的索引
  int currentItem = mVp.getCurrentItem();
  // 要显示的下一个页面的索引
  currentItem++;
  // 设置ViewPager显示的页面
  mVp.setCurrentItem(currentItem % list.size());

  break;

 default:
  break;
 }
 };
};

@SuppressWarnings("deprecation")
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 initView(); 
 // titles = getTitles();
 images=getImages();
 for (int i = 0; i < images.length; i++) {
 ImageView iv=new ImageView(this);
 iv.setBackgroundResource(images[i]);
 list.add(iv);
 //根据图片的数量生成相对应的数量的小圆点
 final View view=new View(this);
 view.setBackgroundResource(R.drawable.login__05);
 DisplayMetrics metrics=new DisplayMetrics();
 float width=TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX,30, metrics);
 float height=TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 30, metrics);
 LinearLayout.LayoutParams params=new LinearLayout.LayoutParams((int)width,(int)height);
 params.leftMargin=5;
 view.setLayoutParams(params);
 llPoints.addView(view);
 }
 //设置第一页显示的标题
 //tvTitle.setText(titles[0]);
 //设置第一页的时候,小圆点显示的背景图
 llPoints.getChildAt(0).setBackgroundResource(R.drawable.login__03);
 //下面封装viewpager的适配器
 MyViewPagerAdapter adapter=new MyViewPagerAdapter(list);
 mVp.setAdapter(adapter);

 //设置ViewPager对象页面变化时的监听
 mVp.setOnPageChangeListener(new OnPageChangeListener() {

 @Override
 //当下一个页面被选择的时候
 public void onPageSelected(int arg0) {
  // TODO Auto-generated method stub
  //tvTitle.setText(titles[arg0%list.size()]);

  llPoints.getChildAt(prevPosition).setBackgroundResource(R.drawable.login__05);

  llPoints.getChildAt(arg0).setBackgroundResource(R.drawable.login__03);

  //把当前点位置做为下一次变化的前一个点的位置
  prevPosition=arg0;
 }

 @Override
 public void onPageScrolled(int arg0, float arg1, int arg2) {
  // TODO Auto-generated method stub

 }

 @Override
 public void onPageScrollStateChanged(int arg0) {
  // TODO Auto-generated method stub

 }
 });

 new Thread(new Runnable() {

 @Override
 public void run() {
  // TODO Auto-generated method stub
  while (true) {

  SystemClock.sleep(3000);

  handler.sendEmptyMessage(0);

  }
 }
 }).start();


}

private void initView() {
 // TODO Auto-generated method stub
 mVp = (ViewPager) findViewById(R.id.vp);
 //tvTitle = (TextView) findViewById(R.id.tv_title);
 llPoints = (LinearLayout) findViewById(R.id.ll_points);
}

private int[] getImages(){

 return new int[]{R.drawable.banner_01,R.drawable.banner_02,R.drawable.banner_03};


}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Android  # ViewPager  # 轮播图  # android ViewPager实现一个无限轮播图  # viewpager实现自动循环轮播图  # Android Viewpager实现无限循环轮播图  # Android使用viewpager实现自动无限轮播图  # ViewPager打造轮播图Banner/引导页Guide  # Android 使用ViewPager实现轮播图效果  # 浅谈Viewpager和轮播图的冲突解决方法  # Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigur  # Android中用RxJava和ViewPager实现轮播图  # 使用ViewPager2实现简易轮播图效果  # 重写  # 第一页  # 是一个  # 就会  # 是个  # 是在  # 抽象类  # 小圆点  # 说到  # 可以实现  # 大家分享  # 如何使用  # 具体内容  # 相对应  # 大家多多  # 三张  # 就可以  # 新建一个  # 中新  # 一张照片 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel模型事件有哪些_Laravel Model Event生命周期详解  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  详解jQuery中的事件  Laravel如何使用Sanctum进行API认证?(SPA实战)  Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  详解Oracle修改字段类型方法总结  如何快速搭建高效香港服务器网站?  微信小程序 闭包写法详细介绍  如何快速搭建支持数据库操作的智能建站平台?  Laravel如何生成URL和重定向?(路由助手函数)  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  javascript读取文本节点方法小结  如何在服务器上三步完成建站并提升流量?  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  制作公司内部网站有哪些,内网如何建网站?  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  如何制作一个表白网站视频,关于勇敢表白的小标题?  如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体  如何用好域名打造高点击率的自主建站?  如何做网站制作流程,*游戏网站怎么搭建?  长沙企业网站制作哪家好,长沙水业集团官方网站?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  Laravel如何实现本地化和多语言支持?(i18n教程)  Android利用动画实现背景逐渐变暗  JavaScript实现Fly Bird小游戏  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Laravel如何为API生成Swagger或OpenAPI文档  如何在IIS7上新建站点并设置安全权限?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  北京企业网站设计制作公司,北京铁路集团官方网站?  如何用y主机助手快速搭建网站?  如何在橙子建站中快速调整背景颜色?  做企业网站制作流程,企业网站制作基本流程有哪些?  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  如何快速生成ASP一键建站模板并优化安全性?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?