实际项目中我们经常用到baner图的轮播,那么今天就给大家看下从我们项目里抽离出来的这个轮播图,供大家参考使用。

Demo地址:http://download.csdn.net/detail/wxk105/9728222

技术要点

  1. loopviewpager的使用
  2. 使用Imagerloader加载网络图片

效果图


loopview包直接复制到项目中


mainactivity.xml布局中引用

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><RelativeLayout
        android:layout_width="match_parent"android:layout_height="180dp"><com.example.xiaoke.loopviewpagerdemo.loopview.LoopViewPager
            android:id="@+id/vp_loop_act"android:layout_width="match_parent"android:layout_height="match_parent"android:cacheColorHint="@android:color/white"android:divider="@null"android:fadingEdge="none"android:listSelector="@android:color/transparent"android:scrollbars="none" /><LinearLayout
            android:id="@+id/ll_point"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"android:layout_marginBottom="15dp"android:layout_marginRight="10dp"android:gravity="right"android:orientation="horizontal" /></RelativeLayout>
</LinearLayout>

mainactivity代码块

package com.example.xiaoke.loopviewpagerdemo;import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;import com.example.xiaoke.loopviewpagerdemo.loopview.LoopViewPager;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private LoopViewPager viewPager;private LinearLayout ll_point;private List<ImageBean> list=new ArrayList<>();//图片集合private List<View> views = new ArrayList<View>();//点的集合private LinearLayout.LayoutParams paramsL = new LinearLayout.LayoutParams(20, 20);//设置每个点容器大小private MyPageAdapter pageAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化控件initview();//初始化数据initdata();}/*** 初始化控件*/private void initview() {viewPager= (LoopViewPager) findViewById(R.id.vp_loop_act);ll_point= (LinearLayout) findViewById(R.id.ll_point);}/*** 初始化数据*/private void initdata() {ImageBean image=new ImageBean();image.setUrl("http://news.cnhubei.com/xw/yl/201405/W020140530279662501386.jpg");ImageBean image2=new ImageBean();image2.setUrl("http://img0.imgtn.bdimg.com/it/u=3688010775,3049294081&fm=21&gp=0.jpg");ImageBean image3=new ImageBean();image3.setUrl("http://npic7.edushi.com/cn/zixun/zh-chs/2015-09/09/4f4842aa50924e2bb6cedff42d09ef4a.png");list.add(image);list.add(image2);list.add(image3);//图片集合,从后台直接返回,前端接收initMyPageAdapter(list);viewPager.setAuto(true);//设置监听viewPager.setOnPageChangeListener(getListener());}/**** 初始化viewpager适配器** @param imageBeanList*/private void initMyPageAdapter(List<ImageBean> imageBeanList) {initPoint(imageBeanList);if (pageAdapter == null) {pageAdapter = new MyPageAdapter(MainActivity.this, imageBeanList);if (viewPager != null) {viewPager.setAdapter(pageAdapter);}} else {pageAdapter.upData(imageBeanList);}}/**** 初始化点* 可以根据图片多少自动增加点*/private void initPoint(List<ImageBean> list) {views.clear();ll_point.removeAllViews();for (int i = 0; i < 3; i++) {View view = new View(getApplicationContext());//设置点的间距paramsL.setMargins(dip2px(getApplicationContext(), 5), 0, 0, 0);view.setLayoutParams(paramsL);//设置点的颜色,默认从第一个开始if (i == 0) {view.setBackgroundResource(R.drawable.point_focus);} else {view.setBackgroundResource(R.drawable.point_normal);}views.add(view);ll_point.addView(view);}}/**** viewpager监听** @return*/@NonNullprivate ViewPager.OnPageChangeListener getListener() {return new ViewPager.OnPageChangeListener() {@Overridepublic void onPageSelected(int position) {//相应图片被选中,相应点变成被选中色if (views.size() != 0 && views.get(position) != null) {for (int i = 0; i < views.size(); i++) {if (i == position) {views.get(i).setBackgroundResource(R.drawable.point_focus);} else {views.get(i).setBackgroundResource(R.drawable.point_normal);}}}}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int arg0) {}};}/*** 根据手机的分辨率从 dp 的单位 转成为 px(像素)** @param context 上下文* @param dpValue dp值* @return*/private int dip2px(Context context, float dpValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dpValue * scale + 0.5f);}
}

ImageBean用于接收后台获取的图片集合
这里我直接使用的网络图片

package com.example.xiaoke.loopviewpagerdemo;/*** 图片实体类* Q164454216* Created by xiaoke on 2017/1/3.*/public class ImageBean {//只需要一个地址即可private String url;public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}
}

Mypageradapter viewpager适配器

package com.example.xiaoke.loopviewpagerdemo;/*** Created by xiaoke on 2016/6/3.*/import android.content.Context;
import android.graphics.Bitmap;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;import java.util.ArrayList;
import java.util.List;/**** viewpageradapter*/
public class MyPageAdapter extends PagerAdapter {private List<ImageBean> list=new ArrayList<>();private Context context;// 图片缓存 默认 等private DisplayImageOptions optionsImag = new DisplayImageOptions.Builder().considerExifParams(true).imageScaleType(ImageScaleType.EXACTLY).cacheInMemory(true).cacheOnDisk(true).bitmapConfig(Bitmap.Config.RGB_565).build();public MyPageAdapter(Context context, List<ImageBean> list){this.list=list;this.context=context;}public void upData(List<ImageBean> list){this.list=list;notifyDataSetChanged();}@Overridepublic int getCount() {//            return  bannerInfoList==null?0:bannerInfoList.size();return list==null?0:list.size();}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {((ViewPager) container).removeView((View) object);}@Overridepublic Object instantiateItem(final ViewGroup container, final int position) {View view = View.inflate(context, R.layout.item_loop_viewpager_act, null);ImageView iv_iamge = (ImageView) view.findViewById(R.id.iv_item_image);//加载图片地址ImageLoader.getInstance().displayImage(list.get(position).getUrl(),iv_iamge,optionsImag);((ViewPager) container).addView(view);return view;}@Overridepublic boolean isViewFromObject(View view, Object obj) {return view == obj;}}

Imagerloader初始化,关于图片加载框架Imagerloader使用,我会专门开一篇博客来讲,今天就简单把初始化,加载图片附上

初始化,需要在MyApplication中进行初始化

package com.example.xiaoke.loopviewpagerdemo;import android.app.Application;import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;/*** Q164454216* Created by xiaoke on 2017/1/3.*/public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();//初始化imageloaderinistalImageLoader();}private void inistalImageLoader() {ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()).threadPriority(Thread.NORM_PRIORITY - 2)// 设置线程的优先级.denyCacheImageMultipleSizesInMemory()// 当同一个Uri获取不同大小的图片,缓存到内存时,只缓存一个。默认会缓存多个不同的大小的相同图片.discCacheFileNameGenerator(new Md5FileNameGenerator())// 设置缓存文件的名字.discCacheFileCount(60)// 缓存文件的最大个数.tasksProcessingOrder(QueueProcessingType.LIFO)// 设置图片下载和显示的工作队列排序.build();// Initialize ImageLoader with configurationImageLoader.getInstance().init(config);}
}

最后要增加清单文件访问网络权限
引用自建的application

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.xiaoke.loopviewpagerdemo" >
<uses-permission android:name="android.permission.INTERNET"/><application
        android:name=".MyApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:supportsRtl="true"android:theme="@style/AppTheme" ><activity android:name=".MainActivity" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

OK,是不是很简单,很方便,快速使用起来吧。

使用loopviewpager打造banner图轮播,带圆点相关推荐

  1. Android三方框架banner实现轮播图

    Android三方框架banner实现轮播图 关于 效果图 第一步,添加引用 第二步,新增实体类及测试数据 第三步,添加banner实例控件,修改主界面代码 自定义图片+标题轮播图 效果图 你以为到这 ...

  2. android github轮播图,GitHub - ZTJzzz/Banner: Android轮播图

    Android轮播图 - Banner 纵观Android古今,轮播图已然泛滥成灾!大神们各显神通大兴土木,所起楼台之高让后来者心生膜拜,纷纷Star!但不法分子也是层出不穷,为求"大神&q ...

  3. jQuery焦点图轮播特效插件bxslider,使用说明 及免费下载四川智汇蓝图整理带bxslider免费下载地址

    这里分享一个方便实用的JQ 焦点图插件,它的特点简单易用,灵活方便通用性强:支持包含内容不HTML,视频,图片等.出众的兼容能力,完美兼容Firefox,Chrome,Safari,iOS,Andro ...

  4. html焦点图自动轮播,JS实现焦点图轮播效果的方法详解

    本文实例讲述了JS实现焦点图轮播效果的方法.分享给大家供大家参考,具体如下: 效果图如下: 一.所用到的知识点 1.DOM操作 2.定时器 3.事件运用 4.Js动画 5.函数递归 6.无限滚动大法 ...

  5. HTML5期末大作业:个人网站设计——彭于晏明星(15页)带特效 带登录 带轮播 带音乐 HTML+CSS+JavaScript 大学生毕设网页设计源码HTML (1)

    HTML5期末大作业:个人网站设计--彭于晏明星(15页)带特效带登录带轮播带音乐 HTML+CSS+JavaScript 期末作业HTML代码 学生网页课程设计期末作业下载 web网页设计制作成品 ...

  6. HTML5期末大作业:个人网站设计——彭于晏明星(15页)带特效 带登录 带轮播 带音乐 HTML+CSS+JavaScript 大学生毕设网页设计源码HTML

    HTML5期末大作业:个人网站设计--彭于晏明星(15页)带特效带登录带轮播带音乐 HTML+CSS+JavaScript 期末作业HTML代码 学生网页课程设计期末作业下载 web网页设计制作成品 ...

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

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

  8. 响应式banner图片轮播布局代码

    响应式banner图片轮播布局代码 基于jQuery制作企业家具网站首页banner响应式图片轮播,支持带左右按钮控制图片淡出淡现切换效果.手机自适应屏幕大小.修改:添加json动态数据轮播图片. 演 ...

  9. bxSlider——一个精悍的拥有一大波焦点图轮播滑动特效的Js程序

    打开这个地址>>强大的支持手机端响应式的jQuery焦点图轮播特效插件bxslider.js(右键查看源代码) bxSlider官网:http://bxslider.com/ ****** ...

最新文章

  1. leetcode-21 合并两个有序链表
  2. 2019秋季PAT甲级_C++题解
  3. tjoi2018D2T2(luogu4590) 游园会 (状压dp)
  4. 易优cms后台RCE以及任意文件上传漏洞
  5. Swift--基本运算符
  6. 前端学习(3332):ant design介绍button
  7. java获取运行时对象,java 面向对象(四十一):反射(五)反射应用二:获取运行时类的完整结构...
  8. 人类开采黄金这么多年了,为何黄金还没像石头一样廉价呢?
  9. 时序分析基本概念介绍——时钟sdc
  10. c语言静态函数调用静态变量_C语言中的静态变量和函数
  11. 一脸懵逼的算法系列之汉诺塔
  12. java 查找文件_Java 实例 – 在指定目录中查找文件
  13. 海信电视root后误删软件无法进入主页键解决办法
  14. 【python爬虫】动漫之家漫画下载(scrapy)
  15. XP和Linux双系统启动菜单的修复
  16. BSS,ESS,SSID,BSSID,ESSID,VAP概念详解
  17. jmeter-same user on each interation
  18. 学会这个2021不一样的感觉学Java性能之 垃圾收集算法
  19. C++HANDLE的理解
  20. nodejs+vue+elementui高校体育馆场地预订系统

热门文章

  1. 反向动力学在计算机动画中的应用,Unity3d教程运用类人动画反向动力学 (Inverse Kinematics)...
  2. python黑马培训怎么样
  3. talentq测试题库rb_TalentQ OT机经分享
  4. Matlab与oneNET通过Mqtt通信
  5. 无线电综合测试仪哪个品牌好
  6. solidworks 2023 SP0.1高级多语言版可以下载了
  7. OMAP4之DSP核(Tesla)软件开发学习(一)
  8. 颠覆传统翻译软件的ChatGPT翻译软件
  9. Polkadot的轻白皮书
  10. 【GUI】一、Swing外观框架BeautyEye使用