应用中常常遇到图片轮播的需求,这时候就需要用到viewpager这个组件。viewpager是android support v4 中提供的一个组件。viewpager使用需要以下几步骤:

1.在布局文件中添加viewpager组件

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

ViewPager路径要写完整,否则会出现问题;

2.创建PagerAdapter,PagerAdapter是viewPager的内容提供者,这里我们的图片就是由PagerAdapter提供给viewpager展示的。同样PagerAdapter也在support v4包中。具体如下所示:

 public class AdvertisingAdapter extends PagerAdapter {

     private List<View> mList;

     public AdvertisingAdapter() {
mList = new ArrayList<View>();
} public void setData(List<View> list) {
if (list != null) {
mList.clear();
mList.addAll(list);
notifyDataSetChanged();
}
} @Override
public int getCount() {
return mList.size();
} @Override
public boolean isViewFromObject(View view, Object object) {
return object == view;
} @Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mList.get(position));
} @Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(mList.get(position), 0);
return mList.get(position);
}
}

3.初始化ViewPager,PagerAdapter

     protected void setupView() {
mPagerAdapter = new AdvertisingAdapter();
mViewPager = (ViewPager) findViewById(R.id.vp_adv);
mViewPager .setAdapter(mPagerAdapter );
mAdvertising.addOnPageChangeListener(this);
}

待PagerAdapter填充图片数据后,ViewPager便可以将图片展示出来。

4.添加“.”。基本所有应用使用到ViewPager都会使用“.”标识当前坐标,即展示到哪一页。如下代码添加点号:

添加布局文件

 <LinearLayout
android:id="@+id/viewGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="20dp"
android:layout_marginRight="20dp"
android:orientation="horizontal"></LinearLayout>

在布局里面动态添加“点”的view

         imageViews = new ImageView[advPics.size()];
ImageView imageView;
for (int i = 0; i < advPics.size(); i++) {
imageView = new ImageView(this);
imageView.setLayoutParams(new LinearLayout.LayoutParams(50, 50));
imageView.setPadding(15, 15, 15, 15);
imageViews[i] = imageView;
if (i == 0) {
imageViews[i].setImageResource(R.drawable.dot_focus);
} else {
imageViews[i].setImageResource(R.drawable.dot_blur);
}
llDot.addView(imageViews[i]);
}

拖动ViewPager时,坐标点动态改变

   @Override
public void onPageSelected(int position) {
LogUtils.d("enter onPageSelected method"); for (int i = 0; i < advPics.size(); i++) {
imageViews[position].setImageResource(R.drawable.dot_focus);
if (position != i) {
imageViews[i].setImageResource(R.drawable.dot_blur);
}
}
}

5.自动轮播。大多数时候,我们展示图片时需要其自动轮播的。

启动线程,控制轮播时间,及发出轮播请求给UI线程

 private void initAutoThread() {
Runnable runnable = new Runnable() {
@Override
public void run() {
while (true) {
if (!isPlayPaused.get()) {
sendUiMessage(MSG_UI_CHANGE_ADV_PIC, what.get(), 0, null);
what.incrementAndGet();
if (what.get() > advPics.size() - 1) {
what.getAndAdd(-advPics.size());
}
}
if (needExit.get()) {
break;
}
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread thread = new Thread(runnable);
thread.setName("Carousel");
thread.start();
}

UI 线程收到请求后,对显示的图片进行更改

  mViewPager.setCurrentItem(msg.arg1);

用viewpager实现图片轮播的更多相关文章

  1. 通过ViewPager 实现图片轮播

    通过ViewPager 实现图片轮播 首先来个效果图 布局文件: LinearLayout 用来存放下方的几个小白点. <?xml version="1.0" encodin ...

  2. Viewpager实现图片轮播

    //-------------主布局文件------------------------------------- <LinearLayout xmlns:android="http: ...

  3. Android ViewPager PagerAdapter 图片轮播

    ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的View类. ViewPager类需要一个PagerAdapter适配器类给它提供数据. ViewPager ...

  4. Android Viewpager实现图片轮播(仿优酷效果)

    1 http://blog.csdn.net/t12x3456/article/details/8160128 2 http://www.cnblogs.com/androidez/archive/2 ...

  5. Android 使用ViewPager 做的半吊子的图片轮播

    Android 使用ViewPager 做的半吊子的图片轮播 效果图 虽然不咋样,但是最起码的功能是实现了,下面我们来一步步的实现它. 界面 下面我们来分析一下界面的构成 整体的布局: 因为我们要做出 ...

  6. 使用FlaycoBanner实现图片轮播效果(加载网络图片)

    FlaycoBanner是一个开源图片轮播框架,支持android2.2及以上: git地址:https://github.com/H07000223/FlycoBanner_Master 在andr ...

  7. Android 图片轮播(最简单的)

    布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android ...

  8. Android学习笔记之图片轮播...

    PS:一个bug又折腾了一个下午....哎... 学习内容: 1.Android利用ViewPager和PagerAdapter实现图片轮播... 2.使用反射机制获取Android的资源信息... ...

  9. Android中使用开源框架android-image-indicator实现图片轮播部署

    之前的博文中有介绍关于图片轮播的实现方式,分别为(含超链接): 1.<Android中使用ViewFlipper实现屏幕切换> 2.<Android中使用ViewPager实现屏幕页 ...

随机推荐

  1. Uva10474 - Where is the Marble?

      两种解法: 1.计数排序 //计数排序 #include<cstdio> #include<iostream> #include<vector> #includ ...

  2. Android自定义图形,图形的拼接、叠加、相容

    直接上Xfermode子类: AvoidXfermode  指定了一个颜色和容差,强制Paint避免在它上面绘图(或者只在它上面绘图). PixelXorXfermode  当覆盖已有的颜色时,应用一 ...

  3. 企业应用架构模式阅读笔记 - Martin Fowler

    1. 数据读取

  4. wampserver下打开phpMyAdmin出现403错误的问题解决方法

    图1 图2 wamp下打开phpMyAdmin出现403错误的问题解决方法安装完wamp后打开其下的phpMyAdmin也就是路径http://localhost/phpmyadmin/ 出现[图一] ...

  5. 分布式存储系统sheepdog

    Sheepdog,是由NTT的3名日本研究员开发的开源项目,主要用来为虚拟机提供块设备. 其架构例如以下: 以下,我们将从架构.模块等几个方面来介绍下: 一.架构图 如上图: 採用无中心节点的全对称架 ...

  6. 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)

    设计模式 ( 十八 ) 策略模式Strategy(对象行为型) 1.概述 在软件开发中也经常遇到类似的情况,实现某一个功能有多种算法或者策略,我们能够依据环境或者条件的不同选择不同的算法或者策略来完毕 ...

  7. C/C++基础总结

    1 static(静态)变量有什么作用 3个体明显的作用:1)在函数体内,静态变量具有“记忆”功能,即一个被声明为静态变量在一个函数被调用的过程中其值维持不变2)在模块内,它的作用域范围是有限制的,即 ...

  8. NDK debug模式

    NDK默认是使用NDEBUG宏的,assert也默认不生效,若要开启assert,按以下步骤: 1.編譯NDK代碼時,後面加上NDK_DEBUG=1 ,如: ndk-build NDK_BUILD=1 ...

  9. [原创]SSAS-引用维度与多数据源、多数据源视图引发分区错误

    背景:       最近有个项目,有32家分公司,集团总部需要取这个32家分公司数据做分析,由于每个分公司的数据都比较庞大,所以最终方案是每个分公司一个DW,在cube搭建过程中将每个公司数据作为一个 ...

  10. QT核心编程之Qt线程 (c)

    QT核心编程之Qt线程是本节要介绍的内容,QT核心编程我们要分几个部分来介绍,想参考更多内容,请看末尾的编辑推荐进行详细阅读,先来看本篇内容. Qt对线程提供了支持,它引入了一些基本与平台无关的线程类 ...