viewpager的無限迴圈方法
阿新 • • 發佈:2019-01-09
現在我們繼續上一篇的講述,這次來講講關於ViewPager的無限迴圈方法。
對於viewpager控制元件的載入和介面卡的載入,上一篇已經有了,我們直接在上一篇的基礎上進行改進,這就是所謂的程式碼的複用。
這次我們使用handler訊息機制以及執行緒來對介面進行更新,話不多說,看看程式碼。
以上程式碼是建立了一個handler例項,並且在接收執行緒訊息後進行相關的介面更新,很簡單,看一下程式碼就清楚了,然後後面增加了執行緒的更新資訊的傳送,筆者設定了每隔兩秒就介面跟新一次,當然你也可以設定你的執行緒更新時間,這個無所謂。<pre name="code" class="java">public class MainActivity extends ActionBarActivity { public static final int CHANG_OK = 1; private int[] res = new int[]{R.drawable.girl,R.drawable.girl2,R.drawable.girl3,R.drawable.girl4,R.drawable.girl5}; private ViewPager viewPager; private List<ImageView> imageViews = new ArrayList<ImageView>(); private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { switch (msg.what) { case CHANG_OK: if(viewPager.getCurrentItem()/(res.length-1)==1) { viewPager.setCurrentItem(viewPager.getCurrentItem()%(res.length-1)); }else { viewPager.setCurrentItem(viewPager.getCurrentItem()%(res.length-1)+1); } break; default: break; } }; };
為了讓thread能一直的傳送訊息,筆者設定了無限制的while(true),並且為了讓大家更清楚,筆者將整個原始碼都放了上去,最後執行的效果和上一篇相似,只是多了自動切換介面的功能和無限迴圈功能。@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = (ViewPager) findViewById(R.id.viewPager); viewPager.setAdapter(new PagerAdapter() { @Override public Object instantiateItem(ViewGroup container, int position) { ImageView imageView = new ImageView(MainActivity.this); imageView.setImageResource(res[position]); imageView.setScaleType(ScaleType.CENTER_CROP); container.addView(imageView); imageViews.add(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { // TODO Auto-generated method stub container.removeView(imageViews.get(position)); } @Override public boolean isViewFromObject(View arg0, Object arg1) { // TODO Auto-generated method stub return arg0 == arg1; } @Override public int getCount() { // TODO Auto-generated method stub return res.length; } }); new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub try { while (true) { Thread.sleep(2000); handler.sendEmptyMessage(CHANG_OK); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start(); }
end~