老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

Android中iewpager實現循環輪播效果的示例分析

這篇文章主要介紹了Android中iewpager實現循環輪播效果的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

旌陽網站制作公司哪家好,找創新互聯!從網頁設計、網站建設、微信開發、APP開發、成都響應式網站建設等網站項目制作,到程序開發,運營維護。創新互聯公司2013年成立到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯。

在網上看到很多利用viewpager實現輪播都是通過設置一個很大的值,讓viewpager開始顯示在這個數值區間的中間,但這種輪播個人感覺不是真正的輪播,因此自己實現了一個輪播的效果。大致思路是這樣的,假如有5張圖adcde是要輪播展示的,這時創建一個新的集合eadcdea,然后再讓viewpager設置當前展示第一張圖,也就是顯示a。這樣當往左滑時顯示的是e,此時設置viewpager.setCurrentItem(5),當右滑到e的時候在往右滑,此時設置viewpager.setCurrentItem(1),這樣就實現了輪播效果。

效果圖如下所示:

Android中iewpager實現循環輪播效果的示例分析

話不多說上一下代碼:

/**
 * viewpager切換頁面時動畫
 */
public class MainActivity extends AppCompatActivity {

  private ViewPager viewPager;
  private ViewPaagerAdapter adapter;
  private ArrayList viewlist=new ArrayList<>();//承載圖片
  private ArrayList tvList=new ArrayList<>();//底部圓點集合
  private int []imgList={R.drawable.img8,R.drawable.img1,R.drawable.img2,R.drawable.img3,R.drawable.img4,R.drawable.img5,
      R.drawable.img6, R.drawable.img7,R.drawable.img8,R.drawable.img1};//圖片數組
  boolean isStop=false;
  private LinearLayout line;//小圓圈父視圖
  private ScheduledThreadPoolExecutor executor;

  private int currentPage;
  private Handler handler=new Handler(){
    @Override
    public void handleMessage(Message msg) {
      super.handleMessage(msg);
      switch (msg.what) {
        case 1:
          viewPager.setCurrentItem(msg.arg1);
          break;

        default:
          break;
      }
    }
  };

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.activity_main);
    viewPager= (ViewPager) findViewById(mybanner_viewpager);
    line= (LinearLayout) findViewById(R.id.line);
    setView();//設置輪播顯示的底圖
    adapter=new ViewPaagerAdapter(this,viewlist);
    viewPager.setAdapter(adapter);
    viewPager.setCurrentItem(1);
    viewPager.setOffscreenPageLimit(10);//加這個是為了防止第一張往左滑動會出現閃爍


    startService();//啟動輪播

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
      @Override
      public void onPageScrolled(final int position, float positionOffset, int positionOffsetPixels) {
        Log.i("tag","位置"+position+"positionOffset"+positionOffset+"positionOffsetPixels"+positionOffsetPixels);
        Log.i("tag","weizhi"+viewPager.getCurrentItem());
        if (position==imgList.length-1) {
          viewPager.setCurrentItem(1,false);

        }else if(viewPager.getCurrentItem()==0&& positionOffsetPixels==0) {
          viewPager.setCurrentItem(imgList.length-2, false);

        }
        currentPage=viewPager.getCurrentItem();
      }

      @Override
      public void onPageSelected(final int position) {
        Log.i("tag","位置wwwww"+position);
        setEnbale();
        if (position==imgList.length-1) {
          tvList.get(0).setEnabled(true);
        }
        else if (position==0) {
          tvList.get(imgList.length-3).setEnabled(true);
        }
        else{
          tvList.get(position-1).setEnabled(true);

        }


      }

      @Override
      public void onPageScrollStateChanged(int state) {


      }
    });


  }


  public void setView() {
    LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(15,15);
    params.leftMargin=10;
    params.rightMargin=10;
    for (int i = 0; i < imgList.length; i++) {
      View view= LayoutInflater.from(this).inflate(R.layout.layout,null,false);

      ImageView img= (ImageView) view.findViewById(R.id.img);
      img.setBackgroundResource(imgList[i]);
      TextView textView= (TextView) view.findViewById(R.id.tv);
      textView.setText(i+"");
      viewlist.add(view);
    }
    for (int i = 0; i < imgList.length-2; i++) {
      TextView view=new TextView(this);
      view.setBackgroundResource(R.drawable.item);


      view.setLayoutParams(params);
      view.setEnabled(false);

      line.addView(view);
      tvList.add(view);

    }
    tvList.get(0).setEnabled(true);

  }

  public void setEnbale(){
    for (TextView tvcycle: tvList) {
      tvcycle.setEnabled(false);
    }
  }

  /**
   * 啟動線程池開啟循環任務
   */
  public void startService(){
    executor=new ScheduledThreadPoolExecutor(1);
    executor.scheduleWithFixedDelay(runnable,1,2, TimeUnit.SECONDS);

  }

  /**
   * 停止任務
   */
  public void stopService(){
    executor.shutdown();
  }

  Runnable runnable=new Runnable() {
    @Override
    public void run() {

      currentPage=currentPage+1%10;
      Message message= Message.obtain();
      message.what=1;
      message.arg1=currentPage;
      handler.sendMessage(message);



    }
  };

  @Override
  protected void onDestroy() {
    super.onDestroy();
    stopService();

  }
}

實現輪播的重點在這:

 if (position==imgList.length-1) {
          viewPager.setCurrentItem(1,false);

        }else if(viewPager.getCurrentItem()==0&& positionOffsetPixels==0) {
          viewPager.setCurrentItem(imgList.length-2, false);

        }

這里解釋一下onPageScrolled里三個參數的含義,第一個position,這個參數要特別注意一下。當用手指滑動時,如果手指按在頁面上不動,position和當前頁面index是一致的;如果手指向左拖動(相應頁面向右翻動),這時候position大部分時間和當前頁面是一致的,只有翻頁成功的情況下最后一次調用才會變為目標頁面;如果手指向右拖動(相應頁面向左翻動),這時候position大部分時間和目標頁面是一致的,只有翻頁不成功的情況下最后一次調用才會變為原頁面。

當直接設置setCurrentItem翻頁時,如果是相鄰的情況(比如現在是第二個頁面,跳到第一或者第三個頁面),如果頁面向右翻動,大部分時間是和當前頁面是一致的,只有最后才變成目標頁面;如果向左翻動,position和目標頁面是一致的。這和用手指拖動頁面翻動是基本一致的。

如果不是相鄰的情況,比如我從第一個頁面跳到第三個頁面,position先是0,然后逐步變成1,然后逐步變成2;我從第三個頁面跳到第一個頁面,position先是1,然后逐步變成0,并沒有出現為2的情況。

positionOffset是當前頁面滑動比例,如果頁面向右翻動,這個值不斷變大,最后在趨近1的情況后突變為0。如果頁面向左翻動,這個值不斷變小,最后變為0。positionOffsetPixels是當前頁面滑動像素,變化情況和positionOffset一致。

這里采用線程池開啟了一個循環任務,線程池的好處不說了,好了到此為止大概實現了viewpager的輪播了。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Android中iewpager實現循環輪播效果的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創新互聯,關注創新互聯行業資訊頻道,更多相關知識等著你來學習!


當前題目:Android中iewpager實現循環輪播效果的示例分析
鏈接分享:http://www.xueling.net.cn/article/pjhdgp.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 任你操精品视频 | 国产精品aⅴ| 草草视频在线观看 | 国产又粗又猛又爽的视频A片 | 免费人妻无码不卡中文字幕系 | 毛片在线一区二区观看精品 | 亚洲欧美日本国产专区一区 | 中国美女a级毛片 | 免费观看的av网站 | 黄网站色视频免费大全 | av无线看 | 粉嫩av一区二区在线播 | 国产aa级 | 欧美日韩激情 | 国产青青青在线手机视频在线 | 麻豆免费在线观看视频 | 久久久精品波多野结衣 | 91三级在线| 浪荡女天天不停挨CAO日常视频 | 99日韩精品视频 | 亚洲精品成人福利网站 | 日韩国产色 | 亚洲日韩国产一区二区三区 | 国产精品美女自拍视频 | 999久久久无码国产精品 | 欧洲成人在线视频 | av不卡一区 | 91精品视频免费看 | 久久久国产精品免费a片3d | 亚洲超碰在线 | 免费观看黄色12片一级视频 | 在线青草| 伊人久久一区二区 | 激情久久久久久久 | 99热网址| 色妺妺免费影院 | 18禁超污无遮挡无码免费应用 | 欧美人妖另类hd1080p | 日韩久久久久久久久久 | 精品日产一区二区三区视频怎么看 | caoprom最新国产免费地址 |