android自动画廊,Android3D画廊效果与自动轮播Banner
最开始项目需要使用3D画廊效果作为首页轮播,网上找了半天也没有比较满意的,最终决定自己写一个。本控件采用的是viewpager完成的,支持无限滑动的3D视觉的画廊效果、 平面普通广告栏轮播。提供对外方法:指示器图片自定义、小图片位置、是否圆角等。本代码已托管到[github]https://github.com/lzjin/ViewPagerGallery
1、先看效果图:
gif1.gif
gif2.gif
ic_banner3.png
ic_banner1.png
ic_banner2.png
2、效果分析 3D画廊效果
代码调用:
mViewPager.initBanner(imagesUriList, true)//图片地址,isGallery参数是否开启3D画廊效果
.addPageMargin(10, 50)//参数1page之间的间距,参数2中间item距离边界的间距
.addPoint(6)//添加指示器
.addPointBottom(7)
.addStartTimer(5)//自动轮播5秒间隔
.addRoundCorners(12)//圆角
.finishConfig()//这句必须加
.addBannerListener(new BannerViewPager.OnClickBannerListener() {
@Override
public void onBannerClick(int position) {
//点击item
}
});
代码分析:
3D画廊效果,是通过滑动的属性动画来设置。那我们就得就得了解ViewPager的PageTransformer类。重写PageTransformer,在滑动的时候进行X轴、Y轴的缩放拉伸来实现。
(1)(-oo,-1) 相对于左边第一页,其左边的所有页面
if (position < -1) {
view.setScaleX(MIN_SCALE);
view.setScaleY(MIN_SCALE);
view.setAlpha(MIN_ALPHA);//这里是设置透明度
}
(2)[-1, 1 )当前页的左右第一页
else if (position < 1) {
float scaleFactor = MIN_SCALE + (1 - Math.abs(position)) * (MAX_SCALE - MIN_SCALE);
//[0, 1 ) 相对于当前选中页,其右边第一页 **
if (position > 0) {
view.setTranslationX(-scaleFactor);
}
// [-1, 0 ) 相对于当前选中页,其左边的第一页**
else if (position < 0) {
view.setTranslationX(scaleFactor);
}
view.setScaleY(scaleFactor);
view.setScaleX(scaleFactor);
// float alpha = 1f - Math.abs(position) * (1 - );
float alpha = MIN_ALPHA + (1 - MIN_ALPHA) * (1 - Math.abs(position));
view.setAlpha(alpha);//透明度
}
(3)[1,+oo) 相对于右边第一页,其右边的所有页面
// (1,+Infinity]
else {
view.setScaleX(MIN_SCALE);
view.setScaleY(MIN_SCALE);
view.setAlpha(MIN_ALPHA);//透明度
}
(4)为了让界面显示3item数据,设置左右间距,这里要注意以下 android:clipChildren="false" 这句代码的含义,就是不限制View的布局,已达到边界绘制效果。(间距根据自己需要可更改)
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"
android:layout_marginLeft="60dp"
android:layout_marginRight="60dp"/>
(5)圆角设置
由于网络图片加载我用的Glide库,对应的圆角设置重写BitmapTransformation即可。这里不多讲,网上工具类很多。
//自定义圆角
public class CornerTransform extends BitmapTransformation {
private static float radius = 0f;
public CornerTransform(Context context) {
this(context, 4);
}
public CornerTransform(Context context, int dp) {
super(context);
this.radius = Resources.getSystem().getDisplayMetrics().density * dp;
}
@Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) {
return roundCrop(pool, toTransform);
}
private static Bitmap roundCrop(BitmapPool pool, Bitmap source) {
if (source == null) return null;
Bitmap result = pool.get(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
if (result == null) {
result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(result);
Paint paint = new Paint();
paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
paint.setAntiAlias(true);
RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight());
canvas.drawRoundRect(rectF, radius, radius, paint);
return result;
}
@Override public String getId() {
return getClass().getName() + Math.round(radius);
}
}
3、 普通效果2
跟上面的实现差不多,唯一的区别就是不重写PageTransformer,参数设置false,使用系统默认的滑动效果即可。
mViewPager.initBanner(imagesUriList, false)//图片地址,关闭3D画廊效果
.addPageMargin(10, 50)//参数1page之间的间距,参数2中间item距离边界的间距
.addPoint(5)//添加指示器,5dp
.addPointBottom(7)
.addStartTimer(5)//自动轮播5秒间隔
.addRoundCorners(12)//圆角
.finishConfig()//这句必须加
.addBannerListener(new BannerViewPager.OnClickBannerListener() {
@Override
public void onBannerClick(int position) {
//点击item
}
});
4、 普通效果1
在普通效果2上,少了圆角设置,已经左右间距设置0即可。
mViewPager.initBanner(imagesUriList, false)//图片地址,关闭3D画廊效果
.addPageMargin(0, 0)//无间距
.addPoint(5)//添加指示器,5dp
.addPointBottom(7)
.addStartTimer(5)//自动轮播5秒间隔
.finishConfig()//这句必须加
.addBannerListener(new BannerViewPager.OnClickBannerListener() {
@Override
public void onBannerClick(int position) {
//点击item
}
});
5、 方法讲解
initBanner(List imagesUriList,boolean isGallery)//图片,是否开启3D画廊效果
initBanner(List imagesUriList,boolean isGallery,float alpha)//图片,画廊,alpha透明度
addPoint(int distance) //间距
addPoint(int distance,int piont_press,int piont) //间距、选中小圆点自定义、未选中小圆点自定义
addRoundCorners(int corners)//圆角10dp
addStartTimer()、stopTimer()
addDefaultImg()
//注意:当添加了3D画廊效果时,columnMargin尽量设小。应该本是已经进行了x、y的缩放
addPageMargin(int columnMargin,int rowMargin)//两个Page之间的距离,中间item的对边界的边距
6.结尾
因为是网络图片,请加网络权限。
如果还是有什么不懂,请前往github查看源码。
纯手工写,实属不易,各位看官如果本文对你有帮助,请点个赞吧。
android自动画廊,Android3D画廊效果与自动轮播Banner相关推荐
- android 定时换图片,android 视频和图片切换并进行自动轮播
刚入android没多久,遇到的比较郁闷的问题就是子线程主线程的问题,更改UI界面,本想做一个图片的轮播但是比较简单,然后就试试实现视频跟图片切换播放进行不停的循环播放.也用过不少控件,但是知其然不知 ...
- android使用ViewPage实现Grally画廊的卡片式效果
通过使用ViewPage实现Grally画廊的卡片式效果,简单易懂易实现. 之前一直在github与网上搜索资料,查看了很多比如RecyclerView实现画廊的效果,ViewPage实现画廊的效果, ...
- 画廊效果的ViewPager实现(附带无限自动轮播)
废话不多说,先上效果图 根据效果所示,第一步实现适配器,完成无限循环 首先做数据上的处理 public static class LoopViewPagerAdapter extends PagerA ...
- android view显示隐藏动画效果,Android 根据手势顶部View自动展示与隐藏效果
首先来看一下效果: 大体思路如下: 总体布局用了一个自定义的ViewGroup,里面包了两个View(top View,bottomView) 我在bottomView里放了ViewPager,里面又 ...
- 项目1 设计简易灯箱画廊 实训要求: (1)利用超链接和图像标记设计简易灯箱画廊。 (2)给简易灯箱画廊增加背景音乐效果。
html5 项目1 设计简易灯箱画廊 实训要求: (1)利用超链接和图像标记设计简易灯箱画廊. (2)给简易灯箱画廊增加背景音乐效果.`` 知识点 (1)超链接标记 <a href=" ...
- android 自动播放 幻灯片,Android自动播放Banner图片轮播效果
本文实例为大家分享了Android自动播放Banner图片轮播的具体代码,供大家参考,具体内容如下 先看一下效果图 支持本地图片以及网络图片or本地网络混合. 使用方式: android:id=&qu ...
- 50个Android开发人员必备UI效果源码[转载]
Android 仿微信之主页面实现篇 Android 仿微信之界面导航篇 Android 高仿QQ 好友分组列表 Android 高仿QQ 界面滑动效果 Android 高仿QQ 登陆界面 Andro ...
- 50个Android开发人员必备UI效果源码
2019独角兽企业重金招聘Python工程师标准>>> Android 仿微信之主页面实现篇 Android 仿微信之界面导航篇 Android 高仿QQ 好友分组列表 Androi ...
- 推荐一个比较好用的画廊展示图片(支持无限轮播)的控件ViewPagerGallery
1.在此我们引用 支持无限滑动的3D视觉的画廊效果. 平面普通广告栏轮播 这个例子中有可以运行的效果,大家可以下载下来先看一下,在我开始使用的时候,发现,想要调整 page item中的间距,比较困难 ...
- Android中RatingBar的自定义效果
Android中RatingBar的自定义效果 有时候android系统提供给我们的ratingbar效果并不达到我们的要求,这个时候就可以自定义自己喜欢的ratingbar. 从上面的效果可以看出, ...
最新文章
- stata安装_Stata自带的代码编辑器太丑了,那为何不使用Jupyter Notebook?
- Python应用实战-从pandas的角度来对比MySQL,教你如何更快更好的学习sql
- nginx后端节点健康检查
- C语言关于符号#和##
- [机器学习] XGBoost 自定义损失函数-FocalLoss
- Python函数积累
- Storm消费Kafka异常 - topic其中两个分区达到某个值不进行消费,持续阻塞
- Fixed Widget侧边固定跟随小工具插件
- Nacos系列:欢迎来到Nacos的世界!
- 学习PMBOK对ITTO输入输出的技术工具整理(关系)
- Linux Ubuntu下载
- 避坑:twilio+python+电话现在不可以使用(大陆)
- 你做的网页在哪些浏览器测试过,这些浏览器的内核分别是什么?
- day11-random模块-随机
- ping unknown host问题怎么解决?
- 爬取大众点评评论-字体加密解析!这个网站很难搞出来!
- 计算机专业英语名人名言,英语名人名言(中英对照)
- HCNP——OSPF路由器的角色
- 解决canvas生成base64图片不清晰的问题
- 抽取_内插_半带滤波器_多相滤波器
热门文章
- Postgresql本地语言环境参数设置(LC_COLLATE,LC_CTYPE)
- HI3559A源码包编译及问题解决
- 交换机MAC地址学习与转发机制
- 基于 软件体系结构(第3版)考试重点和复习指南
- Android访问剪贴板权限,Android 12新增剪贴板访问提醒,可调查应用获取位置数据的频率...
- 有人给我留言要电源软件,于是就有了这篇软件合集
- 检查计算机设备报告书,关于计算机安全检查的自查报告范文
- matlabR2016a与solidworks2016联合仿真的经验分享
- 网络工程师--网络规划和设计案例分析(4)
- 搜索摄像头/录像机IP地址工具是什么