真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

AndroidViewPager無限循環(huán)滑動并可自動滾動完整實例

對于ViewPager 廣告頁這個功能很多APP都有這個功能在網(wǎng)上也看過一些資料,我就在這把我自己完整的實現(xiàn)方法寫出來吧

成都創(chuàng)新互聯(lián)長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為南縣企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作南縣網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

基礎(chǔ)的ViewPager:

<?xml version="1.0" encoding="utf-8"?>


    



很簡單 僅僅是一個ViewPager

接下來簡單的設(shè)置一下ViewPager的Adapter 添加ImageView

public class MainActivity extends AppCompatActivity {

  private ViewPager topVp;
  private int[]images = new int[]{R.mipmap.ad0, R.mipmap.ad1, R.mipmap.ad3}; //模擬存放要展示的圖片
  private List imageViews ;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initImageViews();
    initVp();
  }

  /**
   * 初始化圖片資源
   */
  private void initImageViews() {
    imageViews = new ArrayList<>();
    for(int i = 0;i

上述是最基礎(chǔ)的一個ViewPager 下面我們就在這個基礎(chǔ)上改造就可以了

實現(xiàn)無限循環(huán)滑動:

這里我事先循環(huán)滑動的方式很簡單 就是把 adapter的count 設(shè)置為一個很大的值 這樣 讓它滑不到頭 然后切換圖片 就可以實現(xiàn) 雖然方法比較LOW 但是效果還是可以的

代碼在基礎(chǔ)的ViewPager下修改如下 :

public class MainActivity extends AppCompatActivity {

  private ViewPager topVp;
  private int[]images = new int[]{R.mipmap.ad0, R.mipmap.ad1, R.mipmap.ad3}; //模擬存放要展示的圖片
  private List imageViews ;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initImageViews();
    initVp();
  }

  /**
   * 初始化圖片資源
   */
  private void initImageViews() {
    imageViews = new ArrayList<>();
    for(int i = 0;i

這樣 之后就可以實現(xiàn)無限循環(huán)右滑了 但是在程序剛啟動 是 無法向左滑動的 要解決 很簡單 只需要在開始的時候

viewPager.setCurrentItem(1000*imageViews.size());

即可 這樣 就可以 實現(xiàn) 無限左右滑了

自動定時循環(huán)滑動:

下面增加自動定時左右滑動的功能

要實現(xiàn)自動滑動 最主要的是 實現(xiàn)定時器功能我這里使用 Handler+Runnable的方法在上述代碼的基礎(chǔ)上 修改 如下:

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initImageViews();
    initVp();
    handler = new Handler();
    handler.postDelayed(new TimerRunnable(),5000);
  }

  class TimerRunnable implements Runnable{

    @Override
    public void run() {
      int curItem = topVp.getCurrentItem();
      topVp.setCurrentItem(curItem+1);
      if (handler!=null){
        handler.postDelayed(this,5000);
      }
    }
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    handler = null; //此處在Activity退出時及時 回收
  }

這之后 就可以實現(xiàn)自動滑動了

添加左下角圓形小按鈕:

接下來添加 左下角的導(dǎo)航小原點

首先 修改布局 :

<?xml version="1.0" encoding="utf-8"?>

  


    
    

    
  




我們需要的原點 要放在 LinearLayout布局中

主要原理 就是向這個LinearLayout中動態(tài)添加 小圓點 即可

public class MainActivity extends AppCompatActivity {

  private ViewPager topVp;
  private int[]images = new int[]{R.mipmap.ad0, R.mipmap.ad1, R.mipmap.ad3}; //模擬存放要展示的圖片
  private List imageViews ;
  private List txtPoints;
  private LinearLayout lin_points;
  private Handler handler;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    lin_points = (LinearLayout) findViewById(R.id.lin_points);
    initImageViews();
    initVp();

    initCircle();
    /*
     * 計時器
     */
    handler = new Handler();
    handler.postDelayed(new TimerRunnable(),5000);
  }

  /**
   * 初始化小圓點
   */
  private void initCircle() {
    txtPoints = new ArrayList<>();
    int d = 20;
    int m = 7;
    for (int i = 0; i < imageViews.size(); i++) {
      TextView txt = new TextView(this);
      if (i == 0) {
        txt.setBackgroundResource(R.drawable.point_pink);
      } else {
        txt.setBackgroundResource(R.drawable.point_grey);
      }
      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(d, d);

      params.setMargins(m, m, m, m);
      txt.setLayoutParams(params);
      txtPoints.add(txt);
      lin_points.addView(txt);
    }
  }

  class TimerRunnable implements Runnable{

    @Override
    public void run() {
      int curItem = topVp.getCurrentItem();
      topVp.setCurrentItem(curItem+1);
      changePoints((curItem+1)%imageViews.size());
      if (handler!=null){
        handler.postDelayed(this,5000);
      }
    }
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    handler = null;
  }

  /**
   * 初始化圖片資源
   */
  private void initImageViews() {
    imageViews = new ArrayList<>();
    for(int i = 0;i

給ViewPager添加切換動畫:

topVp.setPageTransformer(true,new CubeOutTransformer());

調(diào)用 此行代碼 可以添加 后面的TransFormer類 是自定義的過渡效果類

控制ViewPager 自動切換的速度

ViewPager自身的切換速度是寫死的,我們無法修改,但是我們可以通過源碼看到,ViewPager的切換速度是通過 Scroller類 控制的,而Scroller類中是可以設(shè)置過渡的時間的,因此 我們可以通過自己創(chuàng)建一個Scroller類 繼承 Scroller 然后 通過反射 把ViewPager中的mScroller屬性 設(shè)置成我們自己的可以設(shè)置時間的Scroller類即可

下面是代碼:

public class FixedSpeedScroller extends Scroller {
  private int mDuration = 1500;

  public FixedSpeedScroller(Context context) {
    super(context);
  }

  public FixedSpeedScroller(Context context, Interpolator interpolator) {
    super(context, interpolator);
  }

  @Override
  public void startScroll(int startX, int startY, int dx, int dy, int duration) {
    // Ignore received duration, use fixed one instead
    super.startScroll(startX, startY, dx, dy, mDuration);
  }

  @Override
  public void startScroll(int startX, int startY, int dx, int dy) {
    // Ignore received duration, use fixed one instead
    super.startScroll(startX, startY, dx, dy, mDuration);
  }

  public void setmDuration(int time) {
    mDuration = time;
  }

  public int getmDuration() {
    return mDuration;
  }
}

反射修改ViewPager屬性:

 try {
      Field field = ViewPager.class.getDeclaredField("mScroller");
      field.setAccessible(true);
      scroller = new FixedSpeedScroller(getActivity());
      scroller.setmDuration(1000);
      field.set(topVp, scroller);
    } catch (Exception e) {
//      e.printStackTrace();
      System.out.println("aaaaaa錯誤啦");
    }

這樣就可以控制速度了

好了,Android ViewPager廣告頁可無限循環(huán)滑動并可自動滾動帶有小圓點的功能基本就實現(xiàn)了,具體參數(shù)大家可以自行設(shè)定


網(wǎng)頁名稱:AndroidViewPager無限循環(huán)滑動并可自動滾動完整實例
分享URL:http://weahome.cn/article/ghgees.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部