Android使用viewpager实现自动无限轮播图

1、具体步骤

说下大概实现步骤,一般我们有两种,一种是viewpager+作为游标的点 。另外一种是重写viewpager。

效果图:

1.1 布局,直接viewpager+一个viewgroup就好。

<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.maxence.viewpager.MainActivity" >
  <RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="220dp" >
    <android.support.v4.view.ViewPager
      android:id="@+id/vp_pager"
      android:layout_width="match_parent"
      android:layout_height="match_parent" />
      <!-- 作为viewgroup 动态 add 游标 -->
      <LinearLayout
        android:id="@+id/ll_container"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:gravity="center"
        android:orientation="horizontal"
        android:layout_alignParentBottom="true"
        ></LinearLayout>
  </RelativeLayout>
</RelativeLayout> 

1.2 动态add的点,常规白点:point_normal.xml。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="oval">
  <stroke
    android:width="1dip"
    android:color="#ffffff"/>
  <solid android:color="#ffffff" />
</shape> 

选中为红点: point_select.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="oval">
  <stroke
    android:width="1dp"
    android:color="#ff0000"
    />
  <solid android:color="#ff0000"/>
</shape> 

1.3动态添加进去图片和游标点。

 /**
   * 初始化数据
   */
  private void initData() {
    mContext = this;
    int[] i = new int[] { R.drawable.bg_lunbo1, R.drawable.bg_lunbo2, R.drawable.bg_lunbo3, R.drawable.bg_lunbo4 };
    al = new ArrayList<ImageView>();
    for (int x = 0; x < i.length; x++) {
      ImageView iv = new ImageView(mContext);
      iv.setBackgroundResource(i[x]);
      al.add(iv);
      View v=new View(mContext);
      v.setBackgroundResource(R.drawable.point_normal);
      //有多少张图就放置几个点
      LayoutParams layoutParams = new LinearLayout.LayoutParams(15, 15);
            layoutParams.leftMargin = 30;
      ll_container.addView(v,layoutParams);
    }
    vp_pager.setAdapter(new Myadapter());
    vp_pager.setOnPageChangeListener(this);
    vp_pager.setCurrentItem(al.size()*1000); //这个是无线轮询的关键
    ll_container.getChildAt(0).setBackgroundResource(R.drawable.point_select);
    prePosition=0;
  } 

1.4 viewpgaer绑定PagerAdapter,这样就能滑动照片并且无限滑了。

class Myadapter extends PagerAdapter {
    @Override
    public int getCount() {
      return Integer.MAX_VALUE; // 要无限轮播
    }
    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
      return arg0 == arg1;
    }
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        int position1=position % al.size();
        ImageView imageView = al.get(position1);
        container.addView(imageView);
        return imageView;
    }
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
      container.removeView((View)object);
    }
  } 

1.5 实现游标,就是滑动图片,下面的红点也跟着变化。

vp_pager.setOnPageChangeListener(this); 

@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int position) {
   int newPosition = position % al.size();
   ll_container.getChildAt(newPosition).setBackgroundResource(R.drawable.point_select);
   ll_container.getChildAt(prePosition).setBackgroundResource(R.drawable.point_normal);
   prePosition=newPosition;
} 

1.6实现自动轮询。开启一个线程即可。

/**
   * 自动轮询
   */
  private void pollint() {
   pThread = new PollThread();
   pThread.start();
  }
class PollThread extends Thread{
    @Override
    public void run() {
      while (poll){
                try {
          Thread.sleep(2000);
        } catch (InterruptedException e) {
          e.printStackTrace();
        } 

runOnUiThread(new Runnable() {@Overridepublic void run() {vp_pager.setCurrentItem(vp_pager.getCurrentItem()+1);}});}}}这样就搞定了,仅仅提供一个思路。自己可以扩展,例如重写viewpager,把功能封装在内部即可。

总结

以上所述是小编给大家介绍的Android使用viewpager实现自动无限轮播图,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Android首页无限轮播功能的示例代码

    最近工作不是很忙,也跟大神学习下总结一些小的技术点: 对于一个App几乎都有Banner广告功能,也就是我们常见的轮播图,当然目前市场第三方框架已经非常成熟了,尤其是youth5201314/banner这里有github地址也可以学习下:https://github.com/youth5201314/banner.git 那么下面给大家介绍我的一些总结: 首先分析下轮播图的设计 多张轮播图定时效果 指示点以及每张图片的文字说明 实现无限轮播,可滑动,图片点击事件 开始布局: <Relative

  • android实现banner轮播图无限轮播效果

    本文实例为大家分享了banner轮播图无限轮播效果的具体代码,供大家参考,具体内容如下 效果展示 第一步(权限配置) <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission andr

  • Android viewpager无限轮播获取网络图片功能

    本文实例为大家分享了viewpager无限轮播获取网络图片的具体代码,供大家参考,具体内容如下 话不多说直接上代码,你们都懂的 小圆点属性 dot_focused.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="recta

  • Android仿京东快报无限轮播效果

    我们常用的京东有一个非常好看的效果: 首页的京东快播有一个无限轮播的公告栏,先看效果: 公告内容大概每3s从中间向上滑出,同时下一条内容从底部向上滑动进入.整个过程还伴随有内容的渐变消失,动画效果很流畅. 采用ViewFlipper来实现更为简单. 看看ViewFlipper类官方注释: Simple {@link ViewAnimator} that will animate between two or more views that have been added to it. Only

  • Android图片无限轮播的实现代码

    本文实例为大家分享了AnAndroid图片无限轮播的具体代码,供大家参考,具体内容如下 public class MainActivity extends Activity { private ViewPager viewPager; private LinearLayout ll_dot; private String[] imageUrls = new String[] { "http://pic8.nipic.com/20100701/5290458_114840036316_2.jpg&

  • android ViewPager实现自动无限轮播和下方向导圆点

    一.布局 小圆点形状的生成shape.xml文件 使用空心还是实心的把对应的注释去掉就可以了. <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" android:useLevel="false&quo

  • Android使用viewpager实现自动无限轮播图

    1.具体步骤 说下大概实现步骤,一般我们有两种,一种是viewpager+作为游标的点 .另外一种是重写viewpager. 效果图: 1.1 布局,直接viewpager+一个viewgroup就好. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:

  • android ViewPager实现一个无限轮播图

    上节我们实现了一个图片可以无限滑动的ViewPager,这一节我们需要自定义一个ViewPager来实现我们想要展现的布局 首先我们需要建一个包,然后新建一个java类,名字随便起 这个类我们需要随便继承自一个viewGroup就行,viewGroup就是可以存放子控件的view,我们的各种layout,比如LinearLayour或者RelativeLayout这种可以在里面放东西的view,而TextView或者ImageView这种只能放内容而不能放其他view的就是普通view 然后我们

  • viewpager实现自动循环轮播图

    本文实例为大家分享了viewpager自动循环轮播图的具体代码,供大家参考,具体内容如下 布局文件 android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <RelativeLayout android:layout_width="match_parent" and

  • 如何使用JavaScript实现无缝滚动自动播放轮播图效果

    在一些项目开发中,我们经常需要使用到轮播图,但是没有深入学习的情况下做轮播图是非常困难的. 思路 分成小问题来解决 1. 动态生成序号12345 页面有多少li(图片),就有多少序号 2. 点击序号.显示高亮.切换图片 2.1 给序号注册onclick事件 2.2 取消其他序号高亮显示,让当前点击的序号高亮显示 2.3 点击序号,动画的方式切换到当前点击的图片位置(设置自定义属性,记录当前索引,有了索引就可用动画进行移动) 3. 鼠标放到盒子上的时候显示左右箭头,移开时候隐藏 onmouseen

  • android控件Banner实现简单轮播图效果

    本文实例为大家分享了android控件Banner实现简单轮播图效果的具体代码,供大家参考,具体内容如下 实现这个轮播图是在Fragment里实现的,所以要想实现,首先要创建Fragment 首先是布局文件中的展示 <com.youth.banner.Banner android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="500dp"

  • Android自定义控件实现优雅的广告轮播图

    前言 今天给大家带来一个新的控件–轮播图,网上已经有很多这类的博客来讲解如何实现的,那么我的这个有哪些特点呢?或是说有哪些不同呢? 满足了轮播图的基本要求,循环滑动,在最后一张切到第一张时可以平稳的过渡 简洁简洁简洁 扩展性强 如何使用 下面我们先展示两种效果图 1 默认效果 代码实现 //布局代码 <com.landptf.view.BannerM android:id="@+id/bm_banner" android:layout_width="match_pare

  • Android仿一号店货物详情轮播图动画效果

    还不是很完全,目前只能点中间图片才能位移,图片外的其他区域没有..(属性动画),对了,图片加载用得是facebook的一款android图片加载库,感觉非常NB啊,完爆一切. 1.先看布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t

  • Android中用RxJava和ViewPager实现轮播图

    前言 很多人要实现轮播图都会想到使用ViewPager + Handler来完成轮播图的效果.但是在RxJava快速发展的情况下,已经可以使用RxJava来代替Handler完成这样任务了. 下面我们就来介绍如何实现RxJava+ViewPager的轮播图. 效果图如下 ViewPager的操作 说到ViwePager应该大家都不陌生,它可以结合普通的View也可以结合Fragment一起使用.在此我也就不对它的使用方法进行过多的介绍了.直接开始介绍轮播的方法. 常见的轮播操作 private

  • Android实现ViewPage轮播图效果

    在android移动端的开发中,首页轮播图是一个特别常见的功能,所以今天就来将最近写的一个小demo记录一下. 首先当然是新建一个项目代码如下: activity_main.xml文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to

随机推荐