ViewPager实现每隔两秒自动切换图片

来源:互联网 发布:数据挖掘软件排名 编辑:程序博客网 时间:2024/05/17 00:56



布局代码:

复制代码
 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2     xmlns:tools="http://schemas.android.com/tools" 3     android:layout_width="match_parent" 4     android:layout_height="match_parent" > 5  6     <FrameLayout  7         android:layout_width="fill_parent" 8         android:layout_height="200dip"         9         >10         11         <android.support.v4.view.ViewPager12             android:id="@+id/vp"13             android:layout_width="fill_parent"14             android:layout_height="fill_parent"15             />16         17         <LinearLayout 18             android:layout_width="fill_parent"19             android:layout_height="35dip"20             android:orientation="vertical"21             android:layout_gravity="bottom"22             android:gravity="center"23             android:background="#33000000"24             >25             26             <TextView 27                 android:id="@+id/title"28                 android:layout_width="wrap_content"29                 android:layout_height="wrap_content"30                 android:text="图片标题"31                 android:textColor="@android:color/white"32                 />33             34             <LinearLayout 35                 android:layout_width="wrap_content"36                 android:layout_height="wrap_content"37                 android:orientation="horizontal"38                 android:layout_marginTop="3dip"39                 >40                 41                 <View 42                     android:id="@+id/dot_0"43                     android:layout_width="5dip"44                     android:layout_height="5dip"45                     android:layout_marginLeft="2dip"46                     android:layout_marginRight="2dip"47                     android:background="@drawable/dot_focused"48                     />49                 <View 50                     android:id="@+id/dot_1"51                     android:layout_width="5dip"52                     android:layout_height="5dip"53                     android:layout_marginLeft="2dip"54                     android:layout_marginRight="2dip"55                     android:background="@drawable/dot_normal"56                     />57                 <View 58                     android:id="@+id/dot_2"59                     android:layout_width="5dip"60                     android:layout_height="5dip"61                     android:layout_marginLeft="2dip"62                     android:layout_marginRight="2dip"63                     android:background="@drawable/dot_normal"64                     />65                 <View 66                     android:id="@+id/dot_3"67                     android:layout_width="5dip"68                     android:layout_height="5dip"69                     android:layout_marginLeft="2dip"70                     android:layout_marginRight="2dip"71                     android:background="@drawable/dot_normal"72                     />73                 <View 74                     android:id="@+id/dot_4"75                     android:layout_width="5dip"76                     android:layout_height="5dip"77                     android:layout_marginLeft="2dip"78                     android:layout_marginRight="2dip"79                     android:background="@drawable/dot_normal"80                     />81                 82             </LinearLayout>83             84             85         </LinearLayout>86         87     </FrameLayout>88     89     90 </RelativeLayout>
复制代码

 

正常的shape图形dot_normal.xml:

复制代码
 1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android="http://schemas.android.com/apk/res/android"  3     android:shape="oval" 4     > 5      6     <corners android:radius="5dip" /> 7      8     <solid android:color="#55000000" /> 9 10 </shape>
复制代码

获取焦点的shape图形 dot_focused.xml

复制代码
 1 <?xml version="1.0" encoding="utf-8"?> 2 <shape xmlns:android="http://schemas.android.com/apk/res/android"  3     android:shape="oval" 4     > 5      6     <corners android:radius="5dip" /> 7      8     <solid android:color="#aaFFFFFF" /> 9 10 </shape>
复制代码

 

 

具体实现代码:

复制代码
  1 import java.util.ArrayList;  2 import java.util.concurrent.Executors;  3 import java.util.concurrent.ScheduledExecutorService;  4 import java.util.concurrent.TimeUnit;  5   6 import android.app.Activity;  7 import android.os.Bundle;  8 import android.os.Handler;  9 import android.os.Message; 10 import android.support.v4.view.PagerAdapter; 11 import android.support.v4.view.ViewPager; 12 import android.support.v4.view.ViewPager.OnPageChangeListener; 13 import android.view.View; 14 import android.view.ViewGroup; 15 import android.widget.ImageView; 16 import android.widget.TextView; 17  18 public class MainActivity extends Activity { 19  20     private int imageIds[]; 21     private String[] titles; 22     private ArrayList<ImageView> images; 23     private ArrayList<View> dots; 24     private TextView title; 25     private ViewPager mViewPager; 26     private ViewPagerAdapter adapter; 27      28     private int oldPosition = 0;//记录上一次点的位置 29     private int currentItem; //当前页面 30     private ScheduledExecutorService scheduledExecutorService; 31  32     @Override 33     public void onCreate(Bundle savedInstanceState) { 34         super.onCreate(savedInstanceState); 35         setContentView(R.layout.activity_main); 36          37         //图片ID 38         imageIds = new int[]{ 39             R.drawable.a,     40             R.drawable.b,     41             R.drawable.c,     42             R.drawable.d,     43             R.drawable.e     44         }; 45          46         //图片标题 47         titles = new String[]{ 48             "巩俐不低俗,我就不能低俗",     49             "扑树又回来啦!再唱经典老歌引万人大合唱",     50             "揭秘北京电影如何升级",     51             "乐视网TV版大派送",     52             "热血屌丝的反杀" 53         }; 54          55         //显示的图片 56         images = new ArrayList<ImageView>(); 57         for(int i =0; i < imageIds.length; i++){ 58             ImageView imageView = new ImageView(this); 59             imageView.setBackgroundResource(imageIds[i]); 60              61             images.add(imageView); 62         } 63          64         //显示的点 65         dots = new ArrayList<View>(); 66         dots.add(findViewById(R.id.dot_0)); 67         dots.add(findViewById(R.id.dot_1)); 68         dots.add(findViewById(R.id.dot_2)); 69         dots.add(findViewById(R.id.dot_3)); 70         dots.add(findViewById(R.id.dot_4)); 71          72         title = (TextView) findViewById(R.id.title); 73         title.setText(titles[0]); 74          75         mViewPager = (ViewPager) findViewById(R.id.vp); 76          77         adapter = new ViewPagerAdapter();  78         mViewPager.setAdapter(adapter); 79          80         mViewPager.setOnPageChangeListener(new OnPageChangeListener() { 81              82  83  84             @Override 85             public void onPageSelected(int position) { 86                 // TODO Auto-generated method stub 87                 title.setText(titles[position]); 88                  89                 dots.get(oldPosition).setBackgroundResource(R.drawable.dot_normal); 90                 dots.get(position).setBackgroundResource(R.drawable.dot_focused); 91                  92                 oldPosition = position; 93                 currentItem = position; 94             } 95              96             @Override 97             public void onPageScrolled(int arg0, float arg1, int arg2) { 98                 // TODO Auto-generated method stub 99                 100             }101             102             @Override103             public void onPageScrollStateChanged(int arg0) {104                 // TODO Auto-generated method stub105                 106             }107         });108         109     }110     111     private class ViewPagerAdapter extends PagerAdapter {112 113         @Override114         public int getCount() {115             // TODO Auto-generated method stub116             return images.size();117         }118 119         //是否是同一张图片120         @Override121         public boolean isViewFromObject(View arg0, Object arg1) {122             // TODO Auto-generated method stub123             return arg0 == arg1;124         }125 126         @Override127         public void destroyItem(ViewGroup view, int position, Object object) {128             // TODO Auto-generated method stub129 //            super.destroyItem(container, position, object);130 //            view.removeViewAt(position);131             view.removeView(images.get(position));132             133         }134 135         @Override136         public Object instantiateItem(ViewGroup view, int position) {137             // TODO Auto-generated method stub138             view.addView(images.get(position));139             140             return images.get(position);141         }142     }143 144     @Override145     protected void onStart() {146         // TODO Auto-generated method stub147         super.onStart();148         149         scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();150         151         //每隔2秒钟切换一张图片152         scheduledExecutorService.scheduleWithFixedDelay(new ViewPagerTask(), 2, 2, TimeUnit.SECONDS);153     }154     155     //切换图片156     private class ViewPagerTask implements Runnable {157 158         @Override159         public void run() {160             // TODO Auto-generated method stub161             currentItem = (currentItem +1) % imageIds.length;162             //更新界面163 //            handler.sendEmptyMessage(0);164             handler.obtainMessage().sendToTarget();165         }166         167     }168     169     private Handler handler = new Handler(){170 171         @Override172         public void handleMessage(Message msg) {173             // TODO Auto-generated method stub174             //设置当前页面175             mViewPager.setCurrentItem(currentItem);176         }177         178     };179 180     @Override181     protected void onStop() {182         // TODO Auto-generated method stub183         super.onStop();184     }185     186     187 188 }
复制代码
0 0