美文网首页
viewparger无限轮播效果

viewparger无限轮播效果

作者: 苏鑫最胖的一组 | 来源:发表于2017-03-31 08:01 被阅读0次

package com.zhongtou.bank.widget;

import android.content.Context;

import android.os.Handler;

import android.os.Message;

import android.os.SystemClock;

import android.provider.ContactsContract;

import android.support.v4.view.PagerAdapter

;import android.support.v4.view.ViewPager

;import android.util.AttributeSet;import android.view.MotionEvent;

import android.view.View

;import android.view.ViewGroup

;import android.view.animation.AccelerateInterpolator;

import com.zhongtou.bank.fragment.main.ChangeSpeedScroller;

import java.lang.reflect.Field;

import java.util.ArrayList;import java.util.Date

;import java.util.List;/

** * Created by IT on 2017/3/30. *//** * 

无限轮播的viewpager */

public class MaxImagerViewPager extends ViewPager {    

private boolean isstop = false;  

  private int loptime = 3500;

    private Listlist = new ArrayList<>();  

  public MaxImagerViewPager(Context context) {        this(context, null);    }   

 public MaxImagerViewPager(Context context, AttributeSet attrs) {        super(context, attrs);        init();    }    

private void init() {        //设置viewpager滑动速度        

Field mScroller = null;        try {         

   mScroller = ViewPager.class.getDeclaredField("mScroller");     

       mScroller.setAccessible(true);          

  ChangeSpeedScroller scroller = new ChangeSpeedScroller(getContext(), new AccelerateInterpolator());        

    scroller.setDuration(200);         

   mScroller.set(this, scroller);   

     } catch (NoSuchFieldException e) {     

       e.printStackTrace();        

} catch (IllegalAccessException e) {   

         e.printStackTrace();        }      

  new Thread() {       

     @Override       

     public void run() {         

       while (true) {        

            SystemClock.sleep(loptime); 

                   if (isstop) {      

                  //得到obtain的对象     

                   Message message = Message.obtain();      

                  message.what = 0;             

           message.arg1 = getCurrentItem() + 1;        

                handler.sendMessage(message);        

            }      

          }    

        }      

  }.start();    }    

//设置轮播时间的方法  

  public void setLoptime(int time) {      

  this.loptime = time;    }  

  //停止轮播    public void stoplop() {   

     if (isstop) {           

 isstop = false;   

     }      

  timetag = false;  

  }  

  //开始轮播   

 public void startlop() {    

    isstop = true;    

}    

private Handler handler = new Handler(new Handler.Callback() {   

     @Override     

   public boolean handleMessage(Message msg) {      

      if (msg.what == 0 && isstop) {      

          //允许轮播        

        int arg1 = msg.arg1;       

         setCurrentItem(arg1);          

  } else {          

      handler.removeMessages(0);      

      }      

      return true;

       }   

 });   

 /**    * 按下停止轮播, 如果离开的时间 >= 2000毫秒,那么ViewPager继续轮播    */ 

   @Override    

public boolean onTouchEvent(MotionEvent ev) {   

     switch (ev.getAction()) {     

       case MotionEvent.ACTION_DOWN:       

         //按下停止                stoplop();      

          break;        

    case MotionEvent.ACTION_UP:  

              if (timetag == false) {     

               timetag = true;                }       

         Timer(new Date().getTime());     

           break;        

  return super.onTouchEvent(ev); 

   }

    private boolean timetag = false;   

 //监测两次时间的间隔   

 private void Timer(final long Curtime) {   

     new Thread() {       

     @Override       

     public void run() {          

      while (timetag) {          

          long time = new Date().getTime();            

        if (time - Curtime >= 2000) {       

                 startlop();        

            }    

            }        

    }    

    }.start();   

 }    

//提供方法设置viewpager的适配器    public void setMaXadapter(Listlist) {

this.list = list;

setAdapter(new Myadapter());

setCurrentItem(Integer.MAX_VALUE / 2);

}

class Myadapter extends PagerAdapter {

@Override

public int getCount() {

return Integer.MAX_VALUE;

}

@Override

public boolean isViewFromObject(View view, Object object) {

return view == object;

}

@Override

public Object instantiateItem(ViewGroup container, int position) {

int i = position % list.size();

View view = list.get(i);

container.addView(view);

return view;

}

@Override

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

//            super.destroyItem(container, position, object);

container.removeView(list.get(position % list.size()));

}

}

}

相关文章

  • viewparger无限轮播效果

    package com.zhongtou.bank.widget; import android.content....

  • android轮播图效果

    先上效果图: viewpager+handler+runnableTask实现轮播图效果。可以自动轮播,左右无限滑...

  • 任务27 - jquery实战 - 轮播

    代码 实现如下轮播效果 展示、代码 实现上述轮播效果,在一个页面有三个轮播 展示、代码 实现如下无限循环滚动轮播效...

  • 关于轮播的思路(使用clone 移动宽度)

    实现如下轮播效果(渐变轮播)task27-1 一个页面有3个轮播task-27-2 实现如下无限循环滚动轮播效果t...

  • ios无限轮播图

    一个非常简单但很实用的无限轮播图(swift版本)UICollectionView无限轮播效果已经有很多前辈定制过...

  • AACycleScrollView swift版本的无限轮播图

    项目地址:AACycleScrollView( Demo见项目地址) 实现效果:自动轮播,无限轮播 最新更新:支持...

  • Banner 实现无限轮播效果

    github.com/youth5201314/banner 【注】 (1) (2) (3) TabLayout自...

  • iOS 3D 轮播图,scrollView 自定义分页

    效果图 主要知识点: 无限轮播原理自动轮播 timer 导致页面无法释放问题collectionView 自定义分...

  • jquery 轮播

    1.渐变轮播,图片淡入淡出 代码预览代码 2.无限循环滚动轮播效果 代码预览代码 3.全屏轮播(图片大加载比较慢)...

  • 2017-02-19

    图片懒加载 效果预览 瀑布流布局 效果预览 木桶布局 效果预览 无限轮播 效果预览 原理 图片懒加载的原理当网页上...

网友评论

      本文标题:viewparger无限轮播效果

      本文链接:https://www.haomeiwen.com/subject/muymottx.html