SliderLayout

LoopViewPage

BGABanner

自定义view实现轮播

仿魅族的banner轮播图

1. SliderLayout

预览效果如下

687474703a2f2f7777332e73696e61696d672e636e2f6d773639302f36313064633033346a773165677a6f7236366f6a64673230393530666b6e70652e676966.gif

使用方法如下:

[ 1 ] 添加依赖

gradle中配置

dependencies {

compile "com.android.support:support-v4:+"

compile 'com.squareup.picasso:picasso:2.3.2'

compile 'com.nineoldandroids:library:2.4.0'

compile 'com.daimajia.slider:library:1.1.5@aar'

}

[ 2 ] 在布局文件中使用

android:id="@+id/slider"

android:layout_width="match_parent"

android:layout_height="200dp"

/>

[ 3 ] 在代码中实现

sliderLayout = (SliderLayout) findViewById(R.id.slider);

//添加图片控件

for(int i=0;i

{

TextSliderView textSliderView=new TextSliderView(this);

textSliderView.description(mTitles[i]);//设置标题

textSliderView.image(mImages[i]);//设置图片的网络地址

textSliderView.setScaleType(BaseSliderView.ScaleType.CenterCrop);//设置图片的缩放效果;

//添加到布局中显示

sliderLayout.addSlider(textSliderView);

}

//设置指示器的位置

sliderLayout.setPresetIndicator(SliderLayout.PresetIndicators.Center_Bottom);

//设置图片的切换效果

sliderLayout.setPresetTransformer(SliderLayout.Transformer.Accordion);

// sliderLayout.setCustomAnimation(new DescriptionAnimation()); 添加textView动画特效

//设置切换时长2000 ,时长越小,切换速度越快

sliderLayout.setDuration(2000);

}

[ 4 ] 性能优化

//性能优化。当页面显示时进行自动播放

@Override

protected void onStart() {

super.onStart();

sliderLayout.startAutoCycle();

}

//性能优化。当页面不显示时暂停自动播放

@Override

protected void onStop() {

super.onStop();

sliderLayout.stopAutoCycle();

}

2. LoopViewPage

Paste_Image.png

3. 自定义view实现轮播

/*

* 广告轮播图的自定义View

*/

public class Advertisements implements OnPageChangeListener, View.OnTouchListener {

private ViewPager vpAdvertise;

private Context context;

private LayoutInflater inflater;

private boolean fitXY;

private int timeDratioin;//多长时间切换一次pager

private boolean isPlay = true;

List views;

// 底部小点图片

private ImageView[] dots;

// 记录当前选中位置

private int currentIndex;

Timer timer;

TimerTask task;

int count = 0;

private Handler runHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case 0x01:

int currentPage = (Integer) msg.obj;

setCurrentDot(currentPage);

vpAdvertise.setCurrentItem(currentPage);

break;

}

}

;

};

public Advertisements(Context context, boolean fitXY, LayoutInflater inflater, int timeDratioin, boolean isPlay) {

this.context = context;

this.fitXY = fitXY;

this.inflater = inflater;

this.timeDratioin = timeDratioin;

this.isPlay = isPlay;

}

public View initView(final List advertiseArray) {

View view = inflater.inflate(R.layout.advertisement_board, null);

vpAdvertise = (ViewPager) view.findViewById(R.id.vpAdvertise);

vpAdvertise.setOnPageChangeListener(this);

views = new ArrayList();

LinearLayout ll = (LinearLayout) view.findViewById(R.id.ll);//获取轮播图片的点的parent,用于动态添加要显示的点

for (int i = 0; i < advertiseArray.size(); i++) {

if (fitXY) {

views.add(inflater.inflate(R.layout.advertisement_item_fitxy, null));

} else {

views.add(inflater.inflate(R.layout.advertisement_item_fitcenter, null));

}

ll.addView(inflater.inflate(R.layout.advertisement_board_dot, null));

}

initDots(view, ll);

AdvertisementAdapter adapter = new AdvertisementAdapter(context, views, advertiseArray);

vpAdvertise.setOffscreenPageLimit(3);

vpAdvertise.setAdapter(adapter);

new Thread() {

@Override

public void run() {

while (isPlay) {

try {

sleep(timeDratioin);

int currentPage = count % advertiseArray.size();

count++;

Message msg = Message.obtain();

msg.what = 0x01;

msg.obj = currentPage;

runHandler.sendMessage(msg);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}.start();

return view;

}

private void initDots(View view, LinearLayout ll) {

dots = new ImageView[views.size()];

// 循环取得小点图片

for (int i = 0; i < views.size(); i++) {

dots[i] = (ImageView) ll.getChildAt(i);

dots[i].setEnabled(true);// 都设为灰色

}

currentIndex = 0;

dots[currentIndex].setEnabled(false);// 设置为黄色,即选中状态

}

private void setCurrentDot(int position) {

if (position < 0 || position > views.size() - 1

|| currentIndex == position) {

return;

}

dots[position].setEnabled(false);

dots[currentIndex].setEnabled(true);

currentIndex = position;

}

@Override

public void onPageScrollStateChanged(int arg0) {

// TODO Auto-generated method stub

switch (arg0) {

case 1:// 手势滑动,空闲中

isPlay = false;

break;

case 2:// 界面切换中

isPlay = true;

break;

case 0:// 滑动结束,即切换完毕或者加载完毕

// 当前为最后一张,此时从右向左滑,则切换到第一张

if (vpAdvertise.getCurrentItem() == vpAdvertise.getAdapter().getCount() - 1 && !isPlay) {

vpAdvertise.setCurrentItem(0);

}

// 当前为第一张,此时从左向右滑,则切换到最后一张

else if (vpAdvertise.getCurrentItem() == 0 && !isPlay) {

vpAdvertise.setCurrentItem(vpAdvertise.getAdapter().getCount() - 1);

}

break;

}

}

@Override

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

// TODO Auto-generated method stub

}

@Override

public void onPageSelected(int position) {

// TODO Auto-generated method stub

count = position;

setCurrentDot(position);

}

@Override

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

isPlay = false;

Log.i("isPlay", "false");

break;

case MotionEvent.ACTION_UP:

isPlay = true;

![0.gif](http://upload-images.jianshu.io/upload_images/6303777-247863508d77ffbe.gif?imageMogr2/auto-orient/strip)

Log.i("isPlay", "true");

break;

default:

break;

}

return true;

}

}

使用方法

android:id="@+id/llAdvertiseBoard"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" />

view.addView(new Advertisements(getContext(), true, LayoutInflater.from(getContext()), 3000, true).initView(advertiseArray));

5. * 仿魅族的banner轮播图

0.gif

6. BGABanner

https://github.com/bingoogolapple/BGABanner-Android

引导界面滑动导航 + 大于等于1页时无限轮播 + 各种切换动画轮播效果 这也是GitHub上优秀的轮播控件 具体用法GitHub上介绍的很清楚 完善也有许多关于它的博客可以了解 这里就不在介绍了

dc235ec4-5f4a-11e6-92b7-144a2a1a1e3f.gif

Android轮播换背景,Android 轮播图的实现方法总结相关推荐

  1. android动态加载背景,Android六种加载动态图的方式(包括动态背景和加载动态图片)之四...

    参考文章:http://www.cnblogs.com/firecode/archive/2012/11/01/2749774.html 其实这篇文章已经写的很全面,我只是用了一下将它加入到我的dem ...

  2. 如何抠图人像换背景?教你一个在线操作的方法

    如何抠图人像换背景?抠图是图像处理中常见的一种技术操作,是将一张图片的一部分截取出来作为单独的图层与另外的背景信息进行设计合成.一张没有背景的图片我们可以通过反复用到各种不同场景中,现在电脑上有很多抠 ...

  3. android 仿qq聊天背景,Android,_安卓实现类似QQ刚换聊天背景的功能,Android - phpStudy...

    安卓实现类似QQ刚换聊天背景的功能 自己实现了一下,但对于一些手机一设置背景就出现闪退不知道为什么,大体思路就是获得用户选择的uri,然后如果屏幕分辨率小于图片的分辨率就对图片进行下处理,防止OOM. ...

  4. android progressbar换背景,Android自定义ProgressBar背景

    对于日常开发过程中,系统自带的ProgressBar显然不能满足我们的需求,虽然网上有很多开源库,但是为了一个ProgressBar而引入一个开源库很明显是划不来的,下面介绍一种方法只需要两步即可实现 ...

  5. android黑色半透明dialog背景,Android开发中Dialog半透明背景消失

    近日,遇到一个Dialog半透明背景消失的问题,背景需求是自定义Dialog实现警告提示框: // 初始化警告弹出框 alertDialog = new EmpAlertView(context, U ...

  6. android+图标+i_explore+无背景,Android Studio中Android Device Monitor中的File Explore不显示文...

    环境:操作系统是Mac,模拟器 问题:Android Studio中Android Device Monitor中的File Explore不显示文件 本人在自学文件存储,想查看"dada/ ...

  7. android view保存成背景,Android用VideoView实现MP4作为页面背景

    类似Tumblr, Spotify, Keep等应用在登录界面都有要采用了背景是动画的效果.自己现在做课程设计,也想使用,所以经过捣鼓以后实现如下图: 动态背景.gif 1. 新建一个用于显示Vide ...

  8. Android设置状态栏字体深色,Android实现修改状态栏背景、字体和图标颜色的方法...

    搜索热词 前言: Android开发,对于状态栏的修改,实在是不友好,没什么api可以用,不像ios那么方便.但是ui又喜欢只搞ios一套.没办法.各种翻源码,写反射.真的蛋疼. 需求场景: 当too ...

  9. android 实训的背景,Android实训项目作业.doc

    Android实训项目作业 2-1用整型数计算两个数的和2 2-7排列任意4个数的顺序,按从小到大顺序输出2 2.1编写显示下列图形的程序.2 3.1编写程序,当点击按钮命令后,页面标题及文本组件的文 ...

最新文章

  1. MyBatis启动:MapperStatement创建
  2. PlayMaker GUI跟随布局的使用
  3. python standard lib_跟Python Standard Library混个脸熟(一)
  4. php获取linux是几核的,linux下怎么查看机器cpu是几核的
  5. 机器学习非监督学习—k-means及案例分析
  6. Verilog HDL语言设计实现过程赋值+译码器
  7. keil软件仿真时,程序不能正常运行解决方法
  8. from py4j.protocol import Py4JError ModuleNotFoundError 错误
  9. npm收录了哪些包_使用VS Code轻松找到npm软件包中的漏洞(Vuln Cost)
  10. influxdb 配置
  11. VS C++ memcpy() 用于double、int、结构体
  12. 测试日照强度的软件,日照分析软件FastSUN - 飞时达软件
  13. 树莓派WiFi设置固定IP地址
  14. 双组百分比堆积柱形图的制作
  15. Spring Boot学习8——Redis
  16. Vue中如何引用富文本?富文本又是啥?
  17. 浅谈探索性数据分析的方法—如何下手处理一堆繁杂的数据
  18. scala成长之路(1)基本语法和数据类型
  19. AireOS WLC配置AP Group
  20. 京东 京东健康HR面 17分钟电话面试

热门文章

  1. Centos7.6 刷新DNS命令
  2. 最新的智能移动终端ios,android等市场占有率情况
  3. 关于流媒体HLS分割的TS文件不能播放
  4. 最新js文件打开方式
  5. webrtc 音频编解码器代码路径
  6. 全球与中国佐米曲普坦鼻喷雾剂市场深度研究分析报告
  7. 7-3 高空坠球(20 分)
  8. 实用又救急!快速恢复ctrl+z删除的文件!
  9. 最新最全的免费股票数据接口--沪深A股深度分析投资参考数据API接口(八)
  10. Task1:皮尔森相关系数计算 | 数据模拟