Android利用ViewPager实现滑动广告板

•android-support-v4.jar,这是谷歌官方 给我们提供的一个兼容低版本Android设备的软件包,里面包囊了只有在Android3.0以上可以使用的api。而ViewPager就是其中之 一,利用它我们可以做很多事情,从最简单的导航,到页面切换菜单等等。

•ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。

•本Demo向大家演示ViewPager的使用,并在用户未滑动View时,每隔5s钟自动切换到下一个View(循环切换),而当用户有Touch到View时取消5s自动切换功能。并有指示器指示当前处于哪一个View。

下面是运行的截图:

这个是非常常见的应用

下面给出实现的代码:

1.源文件

  1 ackage com.eyeandroid.viewpager;
  2
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 import java.util.concurrent.atomic.AtomicInteger;
  6
  7 import android.annotation.SuppressLint;
  8 import android.app.Activity;
  9 import android.os.Bundle;
 10 import android.os.Handler;
 11 import android.os.Message;
 12 import android.os.Parcelable;
 13 import android.support.v4.view.PagerAdapter;
 14 import android.support.v4.view.ViewPager;
 15 import android.support.v4.view.ViewPager.OnPageChangeListener;
 16 import android.view.MotionEvent;
 17 import android.view.View;
 18 import android.view.View.OnTouchListener;
 19 import android.view.ViewGroup;
 20 import android.view.ViewGroup.LayoutParams;
 21 import android.widget.ImageView;
 22
 23 @SuppressLint("HandlerLeak")
 24 public class MainActivity extends Activity {
 25     private ImageView[] imageViews = null;
 26     private ImageView imageView = null;
 27     private ViewPager advPager = null;
 28     private AtomicInteger what = new AtomicInteger(0);
 29     private boolean isContinue = true;
 30
 31     @Override
 32     public void onCreate(Bundle savedInstanceState) {
 33         super.onCreate(savedInstanceState);
 34         setContentView(R.layout.main);
 35         initViewPager();
 36     }
 37
 38
 39     private void initViewPager() {
 40         advPager = (ViewPager) findViewById(R.id.adv_pager);
 41         ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);
 42
 43 //      这里存放的是四张广告背景
 44         List<View> advPics = new ArrayList<View>();
 45
 46         ImageView img1 = new ImageView(this);
 47         img1.setBackgroundResource(R.drawable.advertising_default_1);
 48         advPics.add(img1);
 49
 50         ImageView img2 = new ImageView(this);
 51         img2.setBackgroundResource(R.drawable.advertising_default_2);
 52         advPics.add(img2);
 53
 54         ImageView img3 = new ImageView(this);
 55         img3.setBackgroundResource(R.drawable.advertising_default_3);
 56         advPics.add(img3);
 57
 58         ImageView img4 = new ImageView(this);
 59         img4.setBackgroundResource(R.drawable.advertising_default);
 60         advPics.add(img4);
 61
 62 //      对imageviews进行填充
 63         imageViews = new ImageView[advPics.size()];
 64 //小图标
 65         for (int i = 0; i < advPics.size(); i++) {
 66             imageView = new ImageView(this);
 67             imageView.setLayoutParams(new LayoutParams(20, 20));
 68             imageView.setPadding(5, 5, 5, 5);
 69             imageViews[i] = imageView;
 70             if (i == 0) {
 71                 imageViews[i]
 72                         .setBackgroundResource(R.drawable.banner_dian_focus);
 73             } else {
 74                 imageViews[i]
 75                         .setBackgroundResource(R.drawable.banner_dian_blur);
 76             }
 77             group.addView(imageViews[i]);
 78         }
 79
 80         advPager.setAdapter(new AdvAdapter(advPics));
 81         advPager.setOnPageChangeListener(new GuidePageChangeListener());
 82         advPager.setOnTouchListener(new OnTouchListener() {
 83
 84             @Override
 85             public boolean onTouch(View v, MotionEvent event) {
 86                 switch (event.getAction()) {
 87                 case MotionEvent.ACTION_DOWN:
 88                 case MotionEvent.ACTION_MOVE:
 89                     isContinue = false;
 90                     break;
 91                 case MotionEvent.ACTION_UP:
 92                     isContinue = true;
 93                     break;
 94                 default:
 95                     isContinue = true;
 96                     break;
 97                 }
 98                 return false;
 99             }
100         });
101         new Thread(new Runnable() {
102
103             @Override
104             public void run() {
105                 while (true) {
106                     if (isContinue) {
107                         viewHandler.sendEmptyMessage(what.get());
108                         whatOption();
109                     }
110                 }
111             }
112
113         }).start();
114     }
115
116
117     private void whatOption() {
118         what.incrementAndGet();
119         if (what.get() > imageViews.length - 1) {
120             what.getAndAdd(-4);
121         }
122         try {
123             Thread.sleep(5000);
124         } catch (InterruptedException e) {
125
126         }
127     }
128
129     private final Handler viewHandler = new Handler() {
130
131         @Override
132         public void handleMessage(Message msg) {
133             advPager.setCurrentItem(msg.what);
134             super.handleMessage(msg);
135         }
136
137     };
138
139     private final class GuidePageChangeListener implements OnPageChangeListener {
140
141         @Override
142         public void onPageScrollStateChanged(int arg0) {
143
144         }
145
146         @Override
147         public void onPageScrolled(int arg0, float arg1, int arg2) {
148
149         }
150
151         @Override
152         public void onPageSelected(int arg0) {
153             what.getAndSet(arg0);
154             for (int i = 0; i < imageViews.length; i++) {
155                 imageViews[arg0]
156                         .setBackgroundResource(R.drawable.banner_dian_focus);
157                 if (arg0 != i) {
158                     imageViews[i]
159                             .setBackgroundResource(R.drawable.banner_dian_blur);
160                 }
161             }
162
163         }
164
165     }
166
167     private final class AdvAdapter extends PagerAdapter {
168         private List<View> views = null;
169
170         public AdvAdapter(List<View> views) {
171             this.views = views;
172         }
173
174         @Override
175         public void destroyItem(View arg0, int arg1, Object arg2) {
176             ((ViewPager) arg0).removeView(views.get(arg1));
177         }
178
179         @Override
180         public void finishUpdate(View arg0) {
181
182         }
183
184         @Override
185         public int getCount() {
186             return views.size();
187         }
188
189         @Override
190         public Object instantiateItem(View arg0, int arg1) {
191             ((ViewPager) arg0).addView(views.get(arg1), 0);
192             return views.get(arg1);
193         }
194
195         @Override
196         public boolean isViewFromObject(View arg0, Object arg1) {
197             return arg0 == arg1;
198         }
199
200         @Override
201         public void restoreState(Parcelable arg0, ClassLoader arg1) {
202
203         }
204
205         @Override
206         public Parcelable saveState() {
207             return null;
208         }
209
210         @Override
211         public void startUpdate(View arg0) {
212
213         }
214
215     }
216
217 }  

2.布局文件

这个文件在屏幕上的图片显示具有至关重要的作用

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5     android:orientation="vertical" >
 6
 7     <RelativeLayout
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:orientation="vertical" >
11         <!-- ViewPager是一个控件 -->
12         <android.support.v4.view.ViewPager
13             android:id="@+id/adv_pager"
14             android:layout_width="fill_parent"
15             android:layout_height="160dp" >
16
17         </android.support.v4.view.ViewPager>
18         <LinearLayout
19             android:id="@+id/viewGroup"
20             android:layout_below="@id/adv_pager"
21             android:layout_width="fill_parent"
22             android:layout_height="wrap_content"
23             android:layout_marginTop="-25px"
24             android:gravity="right"
25             android:orientation="horizontal" >
26         </LinearLayout>
27     </RelativeLayout>
28
29 </LinearLayout>  

原博客地址:http://blog.csdn.net/dlutbrucezhang/article/details/8736807

Android利用ViewPager实现滑动广告板

时间: 2024-10-03 07:54:57

Android利用ViewPager实现滑动广告板的相关文章

Android重写ViewPager修改滑动灵敏度

使用ViewPager作为一个页面进行切换,里面可以存放很多View,但有时在操作View时不小心滑动一下就有可能跳到下一页,这并不是我们想要的,这里就需要重写ViewPager修改它的滑动条件 效果图 程序目录结构 BTViewPager.java package com.example.viewpagerdemo; import android.content.Context; import android.support.v4.view.ViewPager; import android.

Android 利用ViewPager实现底部圆点导航左右滑动效果以及Fragment页面切换

上一篇博文我们介绍了利用ViewPager和Fragment实现顶部滑块左右滑动效果,具体参考(http://blog.csdn.net/a123demi/article/details/39480385). 而本篇博文将实例讲解利用ViewPager实现底部圆点导航左右滑动效果,以及被滑动界面实现监听事件,同时通过Fragment实现页面的切换. 对于该效果的实现,需要实现以下几个问题: 1. 底部圆点加载和实现方法? 2. 怎样实现左右滑动效果? 3. 被滑动页面,怎样实现监听事件? 4.

Android利用ViewPager仿微信主界面-android学习之旅(78)

首先是介绍ViewPager这个控件 ,这个控件需要pagerAdapter作为容器来提供数据,同时pagerAdapter的数据源是View数组 效果图如下 部分代码如下,实现如下的方法 mPagerAdapter = new PagerAdapter(){ @Override public int getCount() { return mViews.size(); } @Override public boolean isViewFromObject(View view, Object o

android(8) ViewPager页面滑动切换

一.ViewPager页面滑动切换实现:    借鉴了别人的源码,还是比较容易实现的,而且这种效果还是经常使用的,特此记录一下: 效果图: 主界面: public class MainActivity extends Activity { private ViewPager mPager;// 页卡内容 private List<View> listViews; // Tab页面列表 private ImageView cursor;// 动画图片 private TextView t1, t

Android 禁止Viewpager左右滑动功能

做项目要求某种情况下ViewPager不能滑动 百度后发现重写ViewPager,覆盖ViewPager的onInterceptTouchEvent(MotionEvent arg0)方法和onTouchEvent(MotionEvent arg0)方法,这两个方法的返回值都是boolean类型的,只需要将返回值改为false,那么ViewPager就不会消耗掉手指滑动的事件了 public class NoScrollViewPager extends ViewPager { private

android利用ViewPager做的介绍软件功能demo

<pre name="code" class="java">/** * 介绍该软件的功能 * @author yqq * */ public class WhatNewActivity extends Activity { private ViewPager mViewPager; private ImageView mPage0; private ImageView mPage1; private ImageView mPage2; private I

自定义View 之利用ViewPager 实现画廊效果(滑动放大缩小)

自定义View 之利用ViewPager 实现画廊效果(滑动放大缩小) 转载请标明出处: http://blog.csdn.net/lisdye2/article/details/52315008 本文出自:[Alex_MaHao的博客] 项目中的源码已经共享到github,有需要者请移步[Alex_MaHao的github] 基本介绍 画廊在很多的App设计中都有,如下图所示: 该例子是我没事的时候写的一个小项目,具体源码地址请访问https://github.com/AlexSmille/Y

android ViewPager左右滑动翻页,并可以删除page

首先新建一个Activity,继承FragmentActivity. 初始化一个Fragment的List集合,用于像FragmentStatePagerAdapter填充数据,而ViewPager由FragmentStatePagerAdapter的实例进行初始化.和ListView一样,Fragment的List集合的数据变了,就通知FragmentStatePagerAdapter进行界面刷新. ArrayList<Fragment> fragments =new ArrayList&l

Android ViewPager+Fragment滑动选项卡,tab点击选项卡

有一段时间一直再研究这个,自Android 3.0以后,很少开发者再用以前的TabWidget控件了.那种效果不是很好,也不能滑动.后来陆续出现了各种各样滑动选项卡,每种的出现都各有优势吧.但我还是推荐ViewPager+Fragment滑动选项卡,tab点击选项卡.因为横屏或者竖屏效果都还不错,针对这种效果,还有一种开源框架的出现.接下来会有所介绍. 转载请注明出处:http://blog.csdn.net/qq_16064871 本文demo下载:请点击 一.ViewPagerActivit