https://github.com/youth5201314/banner

compile 'com.youth.banner:banner:1.4.9'
private void setBanner() {
        if (banner == null)
            return;
        //设置banner样式
        banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR);
        //设置图片加载器
        banner.setImageLoader(new GlideImageLoader());
        //设置图片集合
        banner.setImages(images);
        //设置banner动画效果
        banner.setBannerAnimation(Transformer.DepthPage);
        //设置标题集合(当banner样式有显示title时)
//        banner.setBannerTitles(titles);
        //设置自动轮播,默认为true
        banner.isAutoPlay(true);
        //设置轮播时间
        banner.setDelayTime(5000);
        //设置指示器位置(当banner模式中有指示器时)
        banner.setIndicatorGravity(BannerConfig.CENTER);
        //banner设置方法全部调用完毕时最后调用
        banner.start();
    }

1.添加布局fragment_hall_head.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/transparent"
android:orientation="vertical">
<FrameLayout
        android:id="@+id/fl"
android:layout_width="match_parent"
android:layout_height="300px"> <android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="300px" /> <LinearLayout
android:id="@+id/ll_points"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:layout_marginBottom="11dp"
android:orientation="horizontal" /> </FrameLayout>
</LinearLayout> 2.添加资源文件
shape_xiao_yuan_quan_selected.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="8dp"
android:height="8dp" />
<stroke
android:width="1px"
android:color="@color/colorAccent" />
<solid android:color="@color/colorAccent" />
</shape>
shape_xiao_yuan_quan_nomal.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="8dp"
android:height="8dp" />
<stroke
android:width="1px"
android:color="@color/white" />
<solid android:color="@color/white" />
</shape> 3.查找控件
List<String> imgesUrl = new ArrayList<>();
imgesUrl.add("http://img3.fengniao.com/forum/attachpics/913/114/36502745.jpg");
imgesUrl.add("http://imageprocess.yitos.net/images/public/20160910/99381473502384338.jpg");
imgesUrl.add("http://imageprocess.yitos.net/images/public/20160910/77991473496077677.jpg");
imgesUrl.add("http://imageprocess.yitos.net/images/public/20160906/1291473163104906.jpg");
Banner banner = new Banner(MainActivity.this, imgesUrl, findViewById(R.id.fl));
4.添加动画类:
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
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 java.util.List; /**
* Created by Administrator on 2017/2/28.
*/ public class Banner {
private LinearLayout llPoints; //图片里面的小圆点
private ViewPager viewPager; //图片轮播
List<String> imgesUrl;
Context context;
View view; public Banner(Context context, List<String> imgesUrl, View view) {
this.context = context;
this.imgesUrl = imgesUrl;
this.view = view;
viewPager = (ViewPager) view.findViewById(R.id.viewPager);
llPoints = (LinearLayout) view.findViewById(R.id.ll_points);
startBanner();
} /**
* 处理轮播图
*/ public void startBanner() {
MyPagerAdapter myPagerAdapter = new MyPagerAdapter();
viewPager.setAdapter(myPagerAdapter);
viewPager.setCurrentItem(imgesUrl.size() * 10000);
startRool();
//初始化ViewPager轮播小圆圈
llPoints.removeAllViews();
for (int i = 0; i < imgesUrl.size(); i++) {
ImageView point = new ImageView(context);
if (i == 0) {
point.setImageResource(R.drawable.shape_xiao_yuan_quan_selected);
} else {
point.setImageResource(R.drawable.shape_xiao_yuan_quan_nomal);
}
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
if (i > 0) {
params.leftMargin = dp2px(context, 8);
}
llPoints.addView(point, params);
}
//ViewPager的轮播效果(小圆圈改变)
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
position = position % imgesUrl.size();
for (int i = 0; i < llPoints.getChildCount(); i++) {
ImageView image = (ImageView) llPoints.getChildAt(i);
if (i == position) {
image.setImageResource(R.drawable.shape_xiao_yuan_quan_selected);
} else {
image.setImageResource(R.drawable.shape_xiao_yuan_quan_nomal);
}
}
} @Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override
public void onPageScrollStateChanged(int state) { }
}); }
   /**
* 轮播图的adapter
*/ class MyPagerAdapter extends PagerAdapter {
@Override
public int getCount() {
return Integer.MAX_VALUE;
} @Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
} @Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
} @Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = new ImageView(context);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
// ImageLoader.getInstance().displayImage(imgesUrl.get(position % imgesUrl.size()), imageView);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { }
});
imageView.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_UP:
handler.sendEmptyMessageDelayed(1, 2000);
break;
/**
* 当保持按下操作,并从此控件移到外层控件时,就会触发ACTION_CANCEL事件时,
* 当前的手势被中断,不会在接收它的记录
* 将它当做ACTION_UP事件进行处理比较好
*/
case MotionEvent.ACTION_CANCEL:
handler.sendEmptyMessageDelayed(1, 2000);
break; default:
break;
}
// true处理这个事件
return true;
}
}); container.addView(imageView);
return imageView;
}
} Handler handler = new Handler() {
 
  @Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
int currentItem = viewPager.getCurrentItem();
currentItem++;
viewPager.setCurrentItem(currentItem);
startRool();
}
} }; private void startRool() {
handler.sendEmptyMessageDelayed(1, 3000);
} public static int dp2px(Context context, int dp) {
// 获取像素密码
float density = context.getResources().getDisplayMetrics().density;
return (int) (dp * density + 0.5f);
}
}

ViewPager总结的更多相关文章

  1. 踩石行动:ViewPager无限轮播的坑

    2016-6-19 前言 View轮播效果在app中很常见,一想到左右滑动的效果就很容易想到使用ViewPager来实现.对于像我们常说的banner这样的效果,具备无限滑动的功能是可以用ViewPa ...

  2. Android ViewPager打造3D画廊

    本文已授权微信公众号:鸿洋(hongyangAndroid)在微信公众号平台原创首发. 网上有很多关于使用Gallery来打造3D画廊的博客,但是在关于Gallery的官方说法中表明: This cl ...

  3. Android中Fragment和ViewPager那点事儿(仿微信APP)

    在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragm ...

  4. TabLayout + ViewPager

    一.实现思路 1.在build.gradle中添加依赖,例如: compile 'com.android.support:support-v4:23.4.0'compile 'com.android. ...

  5. android内部培训视频_第三节(3)_常用控件(ViewPager、日期时间相关、ListView)

    第三节(2):常用控件之ViewPager.日期时间相关.ListView  一.ViewPager 实例:结合PagerAdapter滑动切换图片  二.日期时间相关:AnalogClock\Dig ...

  6. 简单的ViewPager了解Scroller类

    View滑动是自定义ViewGroup中十分常见的一个功能.Android提供了多种View滑动的方法. layout方法 offsetLeftAndRight()与offsetTopAndBotto ...

  7. PagerSlidingTabStrip介绍及使用,让ViewPager更绚丽

    转载请注明出处http://blog.csdn.net/harryweasley/article/details/42290595,谢谢. 以前一直想着,ViewPager中间的那个横线怎么跟着屏幕的 ...

  8. 详细分析Android viewpager 无限循环滚动图片

    由于最近在忙于项目,就没时间更新博客了,于是趁着周日在房间把最近的在项目中遇到的技术总结下.最近在项目中要做一个在viewpager无限滚动图片的需求,其实百度一下有好多的例子,但是大部分虽然实现了, ...

  9. 一行代码引入 ViewPager 无限循环 + 页码显示

    (出处:http://www.cnblogs.com/linguanh) 前序: 网上的这类 ViewPager 很多,但是很多都不够好,体现在 bug多.对少页面不支持,例如1~2张图片.功能整合不 ...

  10. 使用ViewPager实现自动轮播

    很多APP中都实现了类似引导页的自动轮播,不由得想到昨天的引导页上修改一下代码实现轮播. 其实大体上只需要添加一个线程循环执行就可以了. 项目已同步至:https://github.com/nanch ...

随机推荐

  1. Day 22 Object_oriented_programming 3

    isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象,如果是返回True 1 class F ...

  2. 通过vSphere-client虚拟化服务器

    一.什么是vClientvClient是vSphere的重要组件之一.用于用户连接ESXi或vCenter管理和分配vSphere的各种资源.有vClient和WebvClient两个版本.安装部署了 ...

  3. 51Nod 1019 逆序数(线段树)

    题目链接:逆序数 模板题. #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a) ...

  4. Maximum Product Subarray - LeetCode

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  5. Loj #6287 诗歌

    link: https://loj.ac/problem/6287 一开始差点写FFT了23333,并且FFT还能算这样的三元组的数量而且还不用要求这是一个排列.... 但这太大材小用了(而且很可能被 ...

  6. ADO.NET访问Access(文本数据库)数据操作(CRUD)

    1,ADO.NET访问Access(文本数据库)数据操作(CRUD) 2,DatabaseDesign 文本数据库Northwind.mdb 3,/App_Code 3.1,/App_Code/DBC ...

  7. 负样本采样及bias校准、ctr平滑

    参考:https://zhuanlan.zhihu.com/p/31529643 在CTR预估中,负样本采样是一种常见的特征工程方法.一般CTR预估的原始正负样本比可能达到1:1000~1:10000 ...

  8. [Golang] 从零開始写Socket Server(2): 自己定义通讯协议

    在上一章我们做出来一个最基础的demo后,已经能够初步实现Server和Client之间的信息交流了~ 这一章我会介绍一下怎么在Server和Client之间实现一个简单的通讯协议.从而增强整个信息交 ...

  9. 使用REST-Assured对API接口进行自动化测试

    转载:http://blog.csdn.net/u012050416/article/details/50674612 准备 目标 开始编码 总结   说明:本文只是一个getStart示例,关键在于 ...

  10. dede程序打开install安装时出现dir

    刚在网上找了个开源的dede程序,打开install安装时出现dir.解决方法例如以下: 1.删除install下的index.html和install_lock.txt(有的是要删除install. ...