应用中常常遇到图片轮播的需求,这时候就需要用到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. Cocos2d-x利用CCHttpRequest获取网络图片并显示

    利用CCHttpRequest获取网上http地址的图片并缓存到本地生成CCSprite用于显示 //图片结构class imgstruct : public CCObject { public: i ...

  2. STM32 DFU -- Device Firmware Upgrade

    DFU Class Requests Get Status The Host employs the DFU_GETSTATUS request to facilitate synchronizati ...

  3. 语义化的HTML

    div:division(分开, 分割, 区分,分配, 分界线),标签可以把文档分割为独立的.不同的部分.作为块级元素的代表,因为没有固定的格式表现,目前滥用情况最严重.ul:Unordered Li ...

  4. 哈希表(Hash)的应用

    $hs=@() #定义数组 $hs=@{} #定义Hash表,使用哈希表的键可以直接访问对应的值,如 $hs["王五"] 或者 $hs.王五 的值为 75 $hs=@''@ #定义 ...

  5. Java面试试题

    第一,谈谈final, finally, finalize的区别.最常被问到. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以impl ...

  6. LuaFileSystem学习心得

    LuaFileSystem(简称lfs)是一个用于lua进行文件訪问的库,和Lua版本号同步.且是跨平台的,在为lua安装lfs之前须要先安装luarocks, luarocks是一个用于安装lua库 ...

  7. [ES6] 12. Shorthand Properties in ES6

    Where destructuring in ES6 allows you to easily get properties out of an object, this shorthand prop ...

  8. iOS CocoaPods安装和使用图解

    Cocoapods安装步骤 1.升级Ruby环境 sudo gem update --system 如果Ruby没有安装,请参考 如何在Mac OS X上安装 Ruby运行环境 2.安装CocoaPo ...

  9. Git操作指南(2) —— Git Gui for Windows的建库、克隆(clone)、上传(push)、下载(pull)、合并(转)

    关于linux上建库等操作请看文章: http://hi.baidu.com/mvp_xuan/blog/item/30f5b700a832f0261d9583ad.html http://hi.ba ...

  10. 剑指 offer set 4 矩形覆盖

    总结 1. 斐波那契数列的变形题, 但是稍有隐晦, 有点意思 2. 求解 f(3) 时, 最后一块矩形可以竖着放, 也可以两块矩形横着放, 分别对应于 f(2) 和 f(1) ------------ ...