Android利用ViewPager实现滑动广告板
•android-support-v4.jar,这是谷歌官方 给我们提供的一个兼容低版本Android设备的软件包,里面包囊了只有在Android3.0以上可以使用的api。而ViewPager就是其中之 一,利用它我们可以做很多事情,从最简单的导航,到页面切换菜单等等。
•ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。
•本Demo向大家演示ViewPager的使用,并在用户未滑动View时,每隔5s钟自动切换到下一个View(循环切换),而当用户有Touch到View时取消5s自动切换功能。并有指示器指示当前处于哪一个View。
下面是运行的截图:
![](http://images0.cnblogs.com/blog2015/37473/201504/301434218184888.png)
这个是非常常见的应用
下面给出实现的代码:
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