Android图片无限轮播的实现代码

作者:tuntunw 时间:2023-02-12 14:57:20 

本文实例为大家分享了AnAndroid图片无限轮播的具体代码,供大家参考,具体内容如下


public class MainActivity extends Activity {

private ViewPager viewPager;
 private LinearLayout ll_dot;
  private String[] imageUrls = new String[] {
 "http://pic8.nipic.com/20100701/5290458_114840036316_2.jpg",
  "http://pic2.nipic.com/20090424/1468853_230119053_2.jpg",
  "http://img3.3lian.com/2013/s1/20/d/57.jpg",
 "http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg",
 "http://a0.att.hudong.com/15/08/300218769736132194086202411_950.jpg" };

//private String[] imageUrls = new String[] {
     //"http://192.168.230.1:8080/ab.jpg",
     //"http://192.168.230.1:8080/ae.jpg",
     //"http://192.168.230.1:8080/af.jpg",
     //"http://192.168.230.1:8080/ah.jpg" };

private ArrayList<ImageView> viewList;
 private ArrayList<ImageView> dotList;
 Handler handler = new Handler() {
   public void handleMessage(android.os.Message msg) {
     // 先去获取到当前条目索引
     int currentItem = viewPager.getCurrentItem();
     // 条目索引+1
     currentItem++;
     // 重新设置给viewPager
     viewPager.setCurrentItem(currentItem);
     // 再调用发延时消息的方法
     sendDelayMessage();
   };
 };

@Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   viewPager = (ViewPager) findViewById(R.id.viewPager);
   ll_dot = (LinearLayout) findViewById(R.id.ll_dot);
   // 初始化图片
   initViewList();
   // 初始化小圆点
   initDots();
   // 设置数据适配器
   viewPager.setAdapter(new MyPagerAdapter(this, viewList, handler));
   // 设置初始的展示条目
   viewPager.setCurrentItem(viewList.size() * 100000);
   // 设置延时切换
   sendDelayMessage();

// 监听viewPager的一个滑动事件
   viewPager.setOnPageChangeListener(new OnPageChangeListener() {
     @Override
     public void onPageSelected(int position) {
       // 遍历小点的集合
       for (int i = 0; i < dotList.size(); i++) {
         // 如果当前的索引值和i相等
         if (position % dotList.size() == i) {
           // 设置小点为亮色
           dotList.get(i).setImageResource(R.drawable.dot_focuse);
         } else {
           // 否则暗色
           dotList.get(i).setImageResource(R.drawable.dot_normal);
         }
       }
     }

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

}

@Override
     public void onPageScrollStateChanged(int arg0) {

}
   });
 }

/**
  * 发送延时消息
  */
 private void sendDelayMessage() {
   handler.sendEmptyMessageDelayed(0, 2000);
 }

private void initDots() {
   // 创建一个装小点控件的集合
   dotList = new ArrayList<ImageView>();
   dotList.clear();
   for (int i = 0; i < imageUrls.length; i++) {
     ImageView imageView = new ImageView(this);
     if (i == 0) {
       // 如果是第一张,默认给一个亮的小点
       imageView.setImageResource(R.drawable.dot_focuse);
     } else {
       // 如果不是滴一个,默认给一个暗的小点
       imageView.setImageResource(R.drawable.dot_normal);
     }
     // 设置小点的默认宽高为20dp
     LayoutParams params = new LayoutParams(20, 20);
     // 设置小点的间距
     params.setMargins(5, 0, 5, 0);
     ll_dot.addView(imageView, params);
     // 往小点集合中添加view
     dotList.add(imageView);
   }
 }

private void initViewList() {
   // 先使用xutils的工具类
   BitmapUtils bitmapUtils = new BitmapUtils(this);
   viewList = new ArrayList<ImageView>();
   for (int i = 0; i < imageUrls.length; i++) {
     // 创建imageView 并通过工具类将图片设置到控件上
     ImageView imageView = new ImageView(this);
     bitmapUtils.display(imageView, imageUrls[i]);
     viewList.add(imageView);
   }
 }
}

适配器


public class MyPagerAdapter extends PagerAdapter {
 private List<ImageView> viewList;
 private Context context;
 private Handler handler;

public MyPagerAdapter(Context context, List<ImageView> viewList,
     Handler handler) {
   this.context = context;
   this.viewList = viewList;
   this.handler = handler;
 }

@Override
 public int getCount() {
   return Integer.MAX_VALUE;
 }

@Override
 public boolean isViewFromObject(View arg0, Object arg1) {
   return arg0 == arg1;
 }

@Override
 public Object instantiateItem(ViewGroup container, int position) {
   // 通过控件集合获取imageView 添加到容器中,并作为key 返回
   ImageView imageView = viewList.get(position % viewList.size());
   imageView.setOnTouchListener(new OnTouchListener() {
     @Override
     public boolean onTouch(View v, MotionEvent event) {
       switch (event.getAction()) {
       // 当按下的时候,停止轮播
       case MotionEvent.ACTION_DOWN:
         // 移除所有的回调和消息
         handler.removeCallbacksAndMessages(null);
         break;
       // 抬起
       case MotionEvent.ACTION_UP:
         handler.sendEmptyMessageDelayed(0, 2000);
         break;
       // 取消的时候,继续开始录播
       case MotionEvent.ACTION_CANCEL:
         handler.sendEmptyMessageDelayed(0, 2000);
         break;
       default:
         break;
       }
       //触摸事件不被消费,true 消费该触摸事件
       return true;
     }
   });
   container.addView(imageView);
   return imageView;
 }

@Override
 public void destroyItem(ViewGroup container, int position, Object object) {
   // super.destroyItem(container, position, object);
   container.removeView((View) object);
 }
}

标签:Android,图片轮播
0
投稿

猜你喜欢

  • Spring Boot实现分布式锁的自动释放的示例代码

    2023-10-17 11:06:24
  • Android M(6.x)使用OkHttp包解析和发送JSON请求的教程

    2021-11-25 21:17:58
  • Android实现短信验证码自动填写功能

    2022-01-21 13:12:10
  • Java数据结构之链表、栈、队列、树的实现方法示例

    2021-10-07 10:40:29
  • java实战之猜字小游戏

    2022-03-31 14:48:01
  • Spring Boot中如何使用Swagger详解

    2023-09-27 18:13:58
  • Android studio so库找不到问题解决办法

    2023-10-28 02:20:49
  • 使用JPA自定义VO类型转换(EntityUtils工具类)

    2023-08-26 14:56:17
  • Android切换至SurfaceView时闪屏(黑屏闪一下)以及黑屏移动问题的解决方法

    2023-07-21 10:51:45
  • Android 使用 okhttp3和retrofit2 进行单文件和多文件上传

    2023-04-29 07:33:22
  • Android RecycleView滑动停止后自动吸附效果的实现代码(滑动定位)

    2023-06-05 21:23:40
  • java返回集合为null还是空集合及空集合的三种写法小结

    2021-08-18 05:37:48
  • Android studio实现简单的计算器

    2022-09-07 23:23:28
  • java中JSONObject转换为HashMap(方法+main方法调用实例)

    2023-08-10 04:04:08
  • unity绘制一条流动的弧线(贝塞尔线)

    2022-09-03 18:15:00
  • SpringMvc框架的简介与执行流程详解

    2022-10-15 18:49:00
  • Android不规则封闭区域填充色彩的实例代码

    2022-10-17 08:33:05
  • Android编程使WebView支持HTML5 Video全屏播放的解决方法

    2022-04-11 08:25:15
  • Android 游戏开发中绘制游戏触摸轨迹的曲线图

    2023-02-26 08:50:30
  • IntelliJ IDEA2021.1 配置大全(超详细教程)

    2023-06-24 01:48:44
  • asp之家 软件编程 m.aspxhome.com