适配器

import android.support.v4.view.PagerAdapter;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;import java.util.List;/*** ViewPager适配器*/public class BannerAdapter extends PagerAdapter {//数据源private List<ImageView> imageViewList;public BannerAdapter(List<ImageView> list) {imageViewList = list;}@Overridepublic int getCount() {//取超大的数,实现无线循环效果return Integer.MAX_VALUE;}@Overridepublic boolean isViewFromObject(View view, Object object) {return view == object;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {try {container.addView(imageViewList.get(position % imageViewList.size()), 0);} catch (Exception e) {Log.e("BannerPagerAdapter", "" + e.getLocalizedMessage());}return imageViewList.get(position % imageViewList.size());}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {//图片小于3张需要注释掉此句container.removeView(imageViewList.get(position % imageViewList.size()));}
}

主程序

import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;import xies.academy.hebuni.com.cateringordersystem.adapter.BannerAdapter;public class MainActivity extends AppCompatActivity {//声明组件private ViewPager mViewPager;private List<ImageView> imageViewList;private TextView tvImgDesc;private LinearLayout llDots;//广告素材private int[] bannerImages = {R.mipmap.a1, R.mipmap.a2, R.mipmap.a3, R.mipmap.a4, R.mipmap.a5};//广告语private String[] bannerTexts = {"图1", "图2", "图3", "图4", "图5"};// ViewPager适配器与监听器BannerAdapter bannerAdapter;BannerListener bannerListener;//圆点标志位private int positionIndex = 0;//线程池private ScheduledExecutorService scheduledExecutorService;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main_activity);initView();initData();initAction();}/*** 利用线程池定时执行图片轮播*/@Overrideprotected void onStart() {super.onStart();scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();scheduledExecutorService.scheduleWithFixedDelay(new ViewPagerTask(), 10, 10, TimeUnit.SECONDS);}@Overrideprotected void onStop() {super.onStop();if (scheduledExecutorService != null) {scheduledExecutorService.shutdown();scheduledExecutorService = null;}}private Handler mHandler = new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message msg) {mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);return false;}});/*** 初始化组件*/private void initView() {mViewPager = findViewById(R.id.viewpage);tvImgDesc = findViewById(R.id.tv_bannertext);llDots = findViewById(R.id.ll_points);}/*** BANNER填充图片信息*/private void initData() {imageViewList = new ArrayList<>();View view;LinearLayout.LayoutParams params;ImageView imageView;for (int bannerImg:bannerImages) {//设置广告图imageView = new ImageView(MainActivity.this);imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));imageView.setBackgroundResource(bannerImg);imageViewList.add(imageView);//设置圆点view = new View(MainActivity.this);params = new LinearLayout.LayoutParams(5, 5);params.leftMargin = 10;view.setLayoutParams(params);view.setBackgroundResource(R.drawable.point_background);view.setEnabled(false);llDots.addView(view);}bannerAdapter = new BannerAdapter(imageViewList);mViewPager.setAdapter(bannerAdapter);}/*** BANNER设置事件监听*/private void initAction() {bannerListener = new BannerListener();mViewPager.addOnPageChangeListener(bannerListener);//取中间数来作为起始位置int index = (Integer.MAX_VALUE / 2) - (Integer.MAX_VALUE / 2 % imageViewList.size());//触发监听mViewPager.setCurrentItem(index);llDots.getChildAt(positionIndex).setEnabled(true);}//实现ViewPager监听器接口private class BannerListener implements ViewPager.OnPageChangeListener {@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}@Overridepublic void onPageSelected(int position) {int newPosition = position % bannerImages.length;tvImgDesc.setText(bannerTexts[newPosition]);llDots.getChildAt(newPosition).setEnabled(true);llDots.getChildAt(positionIndex).setEnabled(false);// 更新标志位positionIndex = newPosition;}@Overridepublic void onPageScrollStateChanged(int state) {}}//图片轮播任务private class ViewPagerTask implements Runnable {@Overridepublic void run() {mHandler.sendEmptyMessage(0);}}
}

页面样式

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v4.view.ViewPagerandroid:id="@+id/view_page"android:layout_width="match_parent"android:layout_height="200dp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignBottom="@id/view_page"android:background="#33000000"android:orientation="vertical"android:padding="5dp"><TextViewandroid:id="@+id/tv_banner_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:padding="5dp"android:text="@string/viewPageOne"android:textColor="@android:color/white" /><LinearLayoutandroid:id="@+id/ll_points"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center_horizontal"android:orientation="horizontal" ></LinearLayout></LinearLayout></RelativeLayout>

圆点效果

<!-- point_background.xml -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable="@drawable/point_bg_enable" android:state_enabled="true" /><item android:drawable="@drawable/point_bg_normal" android:state_enabled="false" />
</selector><!-- point_bg_enable.xml -->
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"><corners android:radius="0.5dp" /><solid android:color="#AAFFFFFF" />
</shape><!-- point_bg_normal.xml -->
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"><corners android:radius="0.5dp" /><solid android:color="#55000000" />
</shape>

参考文章:安卓开发笔记——自定义广告轮播Banner(实现无限循环)

Android之——史上最简单图片轮播广告效果实现

Android图片轮播效果相关推荐

  1. android首页图片轮播效果,Android_Android自动播放Banner图片轮播效果,先看一下效果图支持本地图 - phpStudy...

    Android自动播放Banner图片轮播效果 先看一下效果图 支持本地图片以及网络图片or本地网络混合. 使用方式: android:id="@+id/banner" andro ...

  2. Android App图片轮播效果的组件化

    简介 一个通用的图片轮播效果的通用组件,方便开发者快速集成. 初学者,其实应该实现一个自定义控件的,改天有空,在学习下吧,学习能力一般,以前也没写过java,这个组件都写了好久,惭愧啊. 背景 笔者参 ...

  3. android 自适应图片轮播,Android使用Recyclerview实现图片轮播效果的方法

    Android使用Recyclerview实现图片轮播效果的方法 发布时间:2020-06-23 15:47:58 来源:亿速云 阅读:113 作者:清晨 这篇文章将为大家详细讲解有关Android使 ...

  4. android 图片轮播组件,Android客户端实现图片轮播控件

    本文和大家一起写一个Android图片轮播控件,供大家参考,具体内容如下 1. 轮播控件的组成部分 我们以知乎日报Android客户端的轮播控件为例,分析一下轮播控件的主要组成: 首先我们要有用来显示 ...

  5. Android图片轮播第三弹,给你想不到的惊喜

    前言 之前写了两篇图片轮播的文章,分别是http://blog.csdn.net/u011077027/article/details/50771851(android图片轮播第一弹_异步获取和本地获 ...

  6. 移动端实现文字轮播_使用原生JS实现移动端图片轮播效果(一)

    PC端上实现图片轮播效果非常简单,只要通过使用click事件就可以非常简单的实现效果,但是在移动端上,就要通过核心的touch事件来实现.话不多说,现在我们就开始移动端轮播效果的实现. 首先就是原生J ...

  7. android 图片轮播

    今天,简单讲讲Android图片轮播功能. 其实图片轮播功能就是使用ViewPager和Handler,网上查找了资料,把这个简单的问题写的很复杂.其实一个自定义控件完全可以解决.这里直接上代码,不在 ...

  8. php制作图片轮播_图片轮播效果实现方法

    图片轮播效果如何实现呢本文主要介绍了JQuery实现图片轮播效果的制作原理以及实现代码,文章末尾附上源码下载,具有很好的参考价值.下面跟着小编一起来看下吧,希望能帮助到大家. 用JQuery操作DOM ...

  9. html5jqueryl轮播图,基于JQuery的实现图片轮播效果(焦点图)

    完整的演示代码: JQuery实现图片轮播效果 #banner {position:relative; width:478px; height:286px; border:1px solid #666 ...

最新文章

  1. 浅析js中的arguments
  2. 常见的 IO 模型有哪些?Java 中 BIO、NIO、AIO 的区别?
  3. field list什么意思_从源码中学Vue(六)「解密」为什么操作数组的方法也会触发视图更新...
  4. ffmpeg基本用法
  5. win7右键在桌面上转圈圈的解决办法
  6. linux中安装httpd安装错误,linux安装httpd和nginx常见问题及解决办法
  7. go reflect 取指针_Go之如何操作结构体的非导出字段
  8. 论文绘图神器来了:哈佛博士后开源一行代码绘制不同期刊格式图表
  9. TensorFlow2.0(三)--Keras构建神经网络回归模型
  10. 时间函数java_Java时间函数整理
  11. coolfire文章四
  12. 民生银行用户画像搭建与应用 / 民生银行客户画像搭建与应用
  13. JDK1.6官方下载_JDK6官方下载
  14. 【内网学习笔记】25、Exchange 邮件服务器
  15. 平衡电枢磁性扬声器行业调研报告 - 市场现状分析与发展前景预测
  16. uniapp实现选择商品规格,禁用没有库存的规格
  17. java计算机毕业设计疫情物质管理系统源码+数据库+lw文档+系统+部署
  18. SVA(立即断言、并发断言、触发判断)-概述
  19. 破解验证码(1) 数字英文验证码
  20. ARM裸板调试之串口打印及栈初步分析

热门文章

  1. cass绘制围墙lisp_cass绘制围墙lisp
  2. 蚂蚁金服Java岗三面(电面.现场面.HR面)经验总结和分享
  3. 海康微影小红le10热成像仪le15大红热像仪夜视仪红外测温仪使用方法说明
  4. 易宝支付在线支付测试注意事项:
  5. 超详细的线程池原理解析
  6. ZanProxy —— 本地代码调试线上页面,环境再也不是问题
  7. InSAR学习(六)形变监测结果的可视化方法
  8. 分块算法:莫队(持续更新)
  9. 批量删除并更改yolo格式的标签类别
  10. 关于springboot的将自建user对象交给springboot容器管理时出现的小问题