android recyclerview+GalleryLayoutManager 实现广告画廊效果
相信大家平常在项目中遇到过画廊的效果,网上也有多种方式,类似viewPager、recyclerview等等方式实现,今天推荐一个三方库GalleryLayoutManager,便于快速实现,以解燃眉之急。
依赖
gradle依赖
compile 'github.hellocsl:GalleryLayoutManager:1.0.6'
实现
布局文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>
recyclerView设置的adapter
private class Adapter extends RecyclerView.Adapter<RecyclerHolder> { private Context context; private Adapter(Context context) { this.context = context; } @Override public RecyclerHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item_view, null); //自定义view的宽度,控制一屏显示个数 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); int width = context.getResources().getDisplayMetrics().widthPixels; params.width = width / 3; view.setLayoutParams(params); return new RecyclerHolder(view); } @Override public void onBindViewHolder(RecyclerHolder holder, int position) { } @Override public int getItemCount() { return 10; } } private class RecyclerHolder extends RecyclerView.ViewHolder { private View view; public RecyclerHolder(View itemView) { super(itemView); view = itemView; } public View getView() { return view; } }
每个item简单的放置一个布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical"> <ImageView android:layout_width="100dp" android:layout_height="wrap_content" android:src="@mipmap/dota" /> </LinearLayout>
采用第三方的GalleryLayoutManager 与 recyclerView绑定,设置为横向滑动布局
GalleryLayoutManager manager = new GalleryLayoutManager(GalleryLayoutManager.HORIZONTAL); manager.attach(recycler); //设置滑动缩放效果 manager.setItemTransformer(new Transformer()); recycler.setAdapter(new Adapter(this));
缩放效果处理
//滑动过程中的缩放 public class Transformer implements GalleryLayoutManager.ItemTransformer { @Override public void transformItem(GalleryLayoutManager layoutManager, View item, float fraction) { //以圆心进行缩放 item.setPivotX(item.getWidth() / 2.0f); item.setPivotY(item.getHeight() / 2.0f); float scale = 1 - 0.3f * Math.abs(fraction); item.setScaleX(scale); item.setScaleY(scale); } }
可以自定义RecyclerView里每项view的宽度,控制一屏显示效果,adapter的onCreateViewHolder里操作
@Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item_view, null); //自定义view的宽度,控制一屏显示个数 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); int width = context.getResources().getDisplayMetrics().widthPixels; params.width = width / 3; view.setLayoutParams(params); return new RecyclerHolder(view); }
滑动监听
滑动监听最终停止的位置
manager.setOnItemSelectedListener(new GalleryLayoutManager.OnItemSelectedListener() { @Override public void onItemSelected(RecyclerView recyclerView, View item, int position) { //滑动到某一项的position } });
同时支持点击每一项滑动切换,adapter的onBindViewHolder方法里
@Override public void onBindViewHolder(RecyclerHolder holder, final int position) { holder.getView().setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { recycler.smoothScrollToPosition(position); } }); }
至此,一个简单的画廊效果实现,如果你项目正好需要这个,而我正好有。
当然这里只是简单介绍了画廊效果的实现,这个库还提供支持上下滑动的效果,贴上github地址 https://github.com/BCsl/GalleryLayoutManager, 便于大家进一步研究
同时欢迎关注微信公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
浏览器内核(理解)
浏览器内核(理解) 浏览器内核又可以分成两部分:渲染引擎(layout engineer 或者 Rendering Engine)和 JS 引擎。 渲染引擎:它负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入 CSS 等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。 JS 引擎:则是解析 Javascript 语言,执行 javascript语言来实现网页的动态效果。 最开始渲染引擎和 JS 引擎并没有区分的很明确,后来 JS 引擎越来越独立,内核就倾向于只指渲染引擎。有一个网页标准计划小组制作了一个 ACID 来测试引擎的兼容性和性能。 内核的种类很多,如加上没什么人使用的非商业的免费内核,可能会有10多种,但是常见的浏览器内核可以分这四种:Trident、Gecko、Blink、Webkit。 (1)Trident(IE内核) 国内很多的双核浏览器的其中一核便是 Trident,美其名曰 "兼容模式"。 代表: IE、傲游、世界之窗浏览器、Avant、腾讯TT、猎豹安全浏览器、360...
- 下一篇
【观点】区块链手机说到底还是伪命题
随着区块链技术的走红,近期,某些厂商(包括手机和非手机厂商)先后发布了声称采用区块链技术的所谓区块链手机,并在业内引起了激烈的争论。那么区块链手机到底是一种真实的存在,还是厂商们为了商业目的宣传的噱头? 在此,我们可以先看看目前通过媒体报道可知的几家推出区块链手机的厂商(至少声称采用了与区块链相关的技术)的背景。 国外厂商包括印度的VVDN、以色列的Sirin Labs和芬兰的Zipper Global;国内厂商包括糖果、长虹和联想。它们的共性是在目前的智能手机产业和市场中均已被边缘化,甚至有的根本就不是手机厂商。由此不难看出,这些企业推出区块链手机的首要的目的就是希望借此改变自身在智能手机产业中的竞争位置,非主流的希望进入主流,不是手机厂商的希望借此能够敲开智能手机产业的大门,毕竟从未来若干时间看,智能手机依然是最主流的移动设备和流
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用