国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android實(shí)現(xiàn)ViewPager無(wú)限循環(huán)效果(一)

2019-12-12 00:51:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例為大家分享了Android實(shí)現(xiàn)ViewPager無(wú)限循環(huán)的具體代碼,供大家參考,具體內(nèi)容如下

方式一:

實(shí)現(xiàn)原理:

假設(shè)有3張圖片,分別是1,2,3,那么就創(chuàng)建5張圖片,這5張圖片的順序?yàn)椋?,1,2,3,1,其中1,2,3為我們要實(shí)現(xiàn)滑動(dòng)的圖片,最左面的3和最右面的1是我們另外添加的圖片,開(kāi)始時(shí),顯示圖片1,當(dāng)圖片向左滑動(dòng)依次為1,2,3,當(dāng)從第3張圖片繼續(xù)向左滑動(dòng),會(huì)出現(xiàn)我們多添加的圖片1,這時(shí),將當(dāng)前的index設(shè)置為真正的圖片1所在的位置。

package com.xiaomai.myproject.demo;import android.os.Bundle;import android.os.Handler;import android.support.v4.view.ViewPager;import android.view.MotionEvent;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import com.xiaomai.myproject.R;import com.xiaomai.myproject.adapter.LoopViewPagerAdapter;import com.xiaomai.myproject.base.BaseActivity;import com.xiaomai.myproject.utils.Utils;import java.util.ArrayList;import java.util.List;/** * Created by XiaoMai on 2016/10/7 17:19. *  */public class LoopViewPagerDemoActivity extends BaseActivity { /**  * 更新圖片的時(shí)間  */ private static final int UPDATE_TIME = 3 * 1000; private ViewPager mViewPager; private LoopViewPagerAdapter mLoopViewPager; /**  * 圖片資源集合  */ private int[] mImageIds; /**  * 圖片集合  */ private List<ImageView> mImageList; /**  * 當(dāng)前廣告的index  */ private int mCurrentPageIndex; /**  * 指示Point  */ private LinearLayout mLinearLayoutPoints; private Handler mHandler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState); } @Override protected void onResume() {  super.onResume();  mHandler.postDelayed(myRunnable, UPDATE_TIME); } @Override protected void onPause() {  super.onPause();  mHandler.removeCallbacks(myRunnable); } Runnable myRunnable = new Runnable() {  @Override  public void run() {   mViewPager.setCurrentItem(mCurrentPageIndex + 1);  } }; @Override protected void initVariables() {  super.initVariables(); } @Override protected void initViews() {  mLinearLayoutPoints = (LinearLayout) findViewById(R.id.activity_ll_container);  mViewPager = (ViewPager) findViewById(R.id.activity_loop_viewpager); } @Override protected void loadData() {  super.loadData();  mHandler.postDelayed(new Runnable() {   @Override   public void run() {    /**     * 初始化圖片的資源id     */    mImageIds = new int[]{      R.mipmap.ic_launcher,      R.mipmap.ic_launcher,      R.drawable.my_toast,      R.drawable.my_toast};    /**     * 添加ImageView     */    mImageList = new ArrayList<>();    //額外添加兩張圖片    int pagerCount = mImageIds.length + 2;    ViewGroup.LayoutParams layoutParams =      new ViewGroup.LayoutParams(        ViewGroup.LayoutParams.MATCH_PARENT,        ViewGroup.LayoutParams.WRAP_CONTENT);    for (int i = 0; i < pagerCount; i++) {     ImageView imageView = new ImageView(mContext);     imageView.setLayoutParams(layoutParams);     mImageList.add(imageView);    }    //圓點(diǎn)的直徑    int diameter = Utils.dip2px(mContext,10f);    LinearLayout.LayoutParams params =      new LinearLayout.LayoutParams(diameter, diameter);    int margin = Utils.dip2px(mContext,5f);    params.setMargins(margin,margin,margin,margin);    mLinearLayoutPoints.removeAllViews();    for (int i = 0; i < mImageList.size(); i++) {     View view = new View(mContext);     view.setLayoutParams(params);     if (i != 0 && i != mImageList.size() - 1) {      view.setBackgroundResource(R.drawable.circle_normal);     }     mLinearLayoutPoints.addView(view);    }    mLinearLayoutPoints.setVisibility(View.VISIBLE);    mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {     @Override     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {     }     @Override     public void onPageSelected(int position) {      mHandler.removeCallbacks(myRunnable);      mHandler.postDelayed(myRunnable, UPDATE_TIME);      mCurrentPageIndex = position;      if (position == 0) {       // 當(dāng)視圖在第一個(gè)時(shí),將頁(yè)面號(hào)設(shè)置為圖片的最后一張。       mCurrentPageIndex = mImageIds.length;      } else if (position == mImageIds.length + 1) {       // 當(dāng)視圖在最后一個(gè)時(shí),將頁(yè)面號(hào)設(shè)置為圖片的第一張。       mCurrentPageIndex = 1;      } else {      }      /**       * 當(dāng)視圖在第一個(gè)或者最后一個(gè)時(shí),pageIndex和position的值不相等,       * 所以要改變viewPager的當(dāng)前item。       */      if (position != mCurrentPageIndex) {       /**        * 第二參數(shù)必須設(shè)置為false,意思是立即過(guò)渡,不給用戶(hù)視覺(jué)上的效果。        */       mViewPager.setCurrentItem(mCurrentPageIndex, false);       return;      }      for (int i = 1; i < mLinearLayoutPoints.getChildCount() - 1; i++) {       if (i != mCurrentPageIndex){        mLinearLayoutPoints.getChildAt(i).setBackgroundResource(R.drawable.circle_normal);       }else {        mLinearLayoutPoints.getChildAt(mCurrentPageIndex).setBackgroundResource(          R.drawable.circle_select);       }      }     }     @Override     public void onPageScrollStateChanged(int state) {     }    });    /**     * 當(dāng)ViewPager被按下的時(shí)候,取消自動(dòng)滾動(dòng)     * 反之開(kāi)啟自動(dòng)滑動(dòng)。     */    mViewPager.setOnTouchListener(new View.OnTouchListener() {     @Override     public boolean onTouch(View v, MotionEvent event) {      if(event.getAction() == MotionEvent.ACTION_DOWN){       mHandler.removeCallbacks(myRunnable);      }else if (event.getAction() == MotionEvent.ACTION_UP){       mHandler.postDelayed(myRunnable, UPDATE_TIME);      }      return false;     }    });    mLoopViewPager = new LoopViewPagerAdapter(mImageList, mImageIds);    mViewPager.setAdapter(mLoopViewPager);    /**     * 因?yàn)榈?個(gè)item是另外添加的那張圖片,所以初始化時(shí)要把當(dāng)前item設(shè)置為1。     */    mViewPager.setCurrentItem(1);    dissMissProgressDialog();   }  }, 3 * 1000); } @Override protected int getContentLayout() {  return R.layout.act_loopviewpager; }}
package com.xiaomai.myproject.adapter;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import java.util.List;/** * Created by XiaoMai on 2016/10/7 17:23. */public class LoopViewPagerAdapter extends PagerAdapter { private List<ImageView> mImageList; private int[] mImageIds; public LoopViewPagerAdapter(List<ImageView> mImageList, int[] mImageIds) {  this.mImageList = mImageList;  this.mImageIds = mImageIds; } @Override public int getCount() {  return mImageList == null ? 0 : mImageList.size(); } @Override public boolean isViewFromObject(View view, Object object) {  return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) {  if (position == 0) {   // 如果是第0個(gè)item就設(shè)置它的圖片內(nèi)容為最后一個(gè)圖片的內(nèi)容   mImageList.get(position).setImageResource(mImageIds[mImageIds.length-1]);  } else if (position == (mImageList.size() - 1)) {   // 如果是最后一個(gè)item就設(shè)置它的圖片內(nèi)容為第一個(gè)圖片的內(nèi)容   mImageList.get(position).setImageResource(mImageIds[0]);  } else {   // 這是正常的圖片   mImageList.get(position).setImageResource(mImageIds[position - 1]);  }  container.addView(mImageList.get(position));  return mImageList.get(position); } @Override public void destroyItem(ViewGroup container, int position, Object object) {  container.removeView(mImageList.get(position)); }}

布局文件

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include  android:id="@+id/titleBar"  layout="@layout/my_app_bar" /> <android.support.v4.view.ViewPager  android:id="@+id/activity_loop_viewpager"  android:layout_width="match_parent"  android:layout_height="200dp"  android:layout_below="@id/titleBar" /> <LinearLayout  android:id="@+id/activity_ll_container"  android:layout_width="match_parent"  android:orientation="horizontal"  android:gravity="center"  android:background="@color/toast"  android:layout_alignBottom="@id/activity_loop_viewpager"  android:visibility="gone"  android:layout_height="40dp"/></RelativeLayout>

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 霞浦县| 喀喇沁旗| 大洼县| 罗田县| 罗平县| 阜新市| 泸水县| 九龙县| 鄂托克前旗| 新昌县| 浙江省| 建德市| 白沙| 仪陇县| 宣恩县| 丹寨县| 德保县| 广宗县| 绥阳县| 泾源县| 家居| 横山县| 图们市| 酉阳| 灵石县| 霍城县| 华安县| 周口市| 大同县| 哈巴河县| 崇明县| 灌云县| 马山县| 平泉县| 宜昌市| 怀来县| 莱芜市| 六安市| 舒兰市| 舒兰市| 维西|