ViewPager實現圖片輪翻效果

jopen 9年前發布 | 1K 次閱讀 Java Android

很多App都有這種效果,特別一些電商類的App,頂部每隔幾秒鐘會向右翻頁顯示下張圖片,用來作推廣或者內容展示用的。今天來簡單地模仿一下,還自帶一個自動跳動的小功能(底部有幾個小點,圖片移動的時候,點的狀態也在變化),用定時器來實現不難。

    import java.util.ArrayList;

import java.util.concurrent.Executors;  

import java.util.concurrent.ScheduledExecutorService;  

import java.util.concurrent.TimeUnit;  



import android.app.Activity;  

import android.os.Bundle;  

import android.os.Handler;  

import android.os.Message;  

import android.support.v4.view.PagerAdapter;  

import android.support.v4.view.ViewPager;  

import android.support.v4.view.ViewPager.OnPageChangeListener;  

import android.view.View;  

import android.view.ViewGroup;  

import android.widget.ImageView;  

import android.widget.TextView;  



public class MainActivity extends Activity {  

    private int imageIds[];  

    private String[] titles;  

    private ArrayList<ImageView> images;  

    private ArrayList<View> dots;  

    private TextView title;  

    private ViewPager mViewPager;  

    private ViewPagerAdapter adapter;  

    private int oldPosition = 0;//記錄上一次點的位置  

    private int currentItem; //當前頁面  

    private ScheduledExecutorService scheduledExecutorService;  

    @Override  

    public void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.activity_main);  

        //圖片ID  

        imageIds = new int[]{  

            R.drawable.a,     

            R.drawable.b,     

            R.drawable.c,     

            R.drawable.d,     

            R.drawable.e      

        };  

        //圖片標題  

        titles = new String[]{  

            "鞏俐不低俗,我就不能低俗",   

            "撲樹又回來啦!再唱經典老歌引萬人大合唱",    

            "揭秘北京電影如何升級",     

            "樂視網TV版大派送",      

            "熱血屌絲的反殺"  

        };  

        //顯示的圖片  

        images = new ArrayList<ImageView>();  

        for(int i =0; i < imageIds.length; i++){  

            ImageView imageView = new ImageView(this);  

            imageView.setBackgroundResource(imageIds[i]);  

            images.add(imageView);  

        }  

        //顯示的點  

        dots = new ArrayList<View>();  

        dots.add(findViewById(R.id.dot_0));  

        dots.add(findViewById(R.id.dot_1));  

        dots.add(findViewById(R.id.dot_2));  

        dots.add(findViewById(R.id.dot_3));  

        dots.add(findViewById(R.id.dot_4));  

        title = (TextView) findViewById(R.id.title);  

        title.setText(titles[0]);  

        mViewPager = (ViewPager) findViewById(R.id.vp);  

        adapter = new ViewPagerAdapter();   

        mViewPager.setAdapter(adapter);  

        mViewPager.setOnPageChangeListener(new OnPageChangeListener() {  

            @Override  

            public void onPageSelected(int position) {  

                title.setText(titles[position]);  

                dots.get(oldPosition).setBackgroundResource(R.drawable.dot_normal);  

                dots.get(position).setBackgroundResource(R.drawable.dot_focused);  

                oldPosition = position;  

                currentItem = position;  

            }  

            @Override  

            public void onPageScrolled(int arg0, float arg1, int arg2) {  

            }  

            @Override  

            public void onPageScrollStateChanged(int arg0) {  

            }  

        });  

    }  

    private class ViewPagerAdapter extends PagerAdapter {  

        @Override  

        public int getCount() {  

            return images.size();  

        }  

        //是否是同一張圖片  

        @Override  

        public boolean isViewFromObject(View arg0, Object arg1) {  

            return arg0 == arg1;  

        }  

        @Override  

        public void destroyItem(ViewGroup view, int position, Object object) {  

            view.removeView(images.get(position));  

        }  

        @Override  

        public Object instantiateItem(ViewGroup view, int position) {  

            view.addView(images.get(position));  

            return images.get(position);  

        }  

    }  



    @Override  

    protected void onStart() {  

        // TODO Auto-generated method stub  

        super.onStart();  

        scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();  

        //每隔2秒鐘切換一張圖片  

        scheduledExecutorService.scheduleWithFixedDelay(new ViewPagerTask(), 2, 2, TimeUnit.SECONDS);  

    }  



    //切換圖片  

    private class ViewPagerTask implements Runnable {  

        @Override  

        public void run() {  

            currentItem = (currentItem +1) % imageIds.length;  

            //更新界面  

            handler.obtainMessage().sendToTarget();  

        }  

    }  

    private Handler handler = new Handler(){  

        @Override  

        public void handleMessage(Message msg) {  

            //設置當前頁面  

            mViewPager.setCurrentItem(<span style="font-family: Arial, Helvetica, sans-serif;">currentItem</span><span style="font-family: Arial, Helvetica, sans-serif;">);</span>  

        }  

    };  

}  

</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!