android gallery当前view变大,GitHub – hutcwp/GalleryViewDemo: 实现画廊效果(中间放大两边缩小)无限循环向左滑向右滑,Viewpager和Recycl…「建议收藏」

android gallery当前view变大,GitHub – hutcwp/GalleryViewDemo: 实现画廊效果(中间放大两边缩小)无限循环向左滑向右滑,Viewpager和Recycl…「建议收藏」GalleryViewDemo导包implementation’com.android.support:design:28.0.0’implementation’com.android.support:recyclerview-v7:28.0.0’一个是ViewPager所在包,另一个是RecyclerView所在包RecyclerView实现GalleryView效果可(伪无限)无限左滑右滑…

大家好,又见面了,我是你们的朋友全栈君。

GalleryViewDemo

导包

implementation ‘com.android.support:design:28.0.0’

implementation ‘com.android.support:recyclerview-v7:28.0.0’

一个是ViewPager所在包,另一个是RecyclerView所在包

RecyclerView实现GalleryView效果可(伪无限)无限左滑右滑

先上效果图

2c5020b299e99325266815fd8d1dd032.gif

9b7641b59ad9887031588a89ca1f6233.gif

要点:

在有限的数据里面, 实现无限个Item,也就是可循环

在第一次显示的时候, 就可以左滑

滑动Item被放大

用RecyclerView实现GalleryView效果已经有BCsl大神的BCsl/GalleryLayoutManager使用自定义 LayoutManager 实现 Android 中 Gallery 或者 ViewPager 控件的效果

美滋滋:-P

传送门在这里

支持垂直和水平两个方向,支持 RecycleView 的试图回收机制

在有限的数据里面,实现无限个Item

在RecyclerView.Adapter的方法中:

@Override

public int getItemCount() {

return Integer.MAX_VALUE;

}

Integer.MAX_VALUE,即2147483647(2^32-1),距离真正的无限大还是有点差距的,不过效果也可以

第一次显示的时候实现左滑

只需要在一开始的时候,产生一定的偏移量就可以左滑了

@Override

public void setAdapter(Adapter adapter) {

super.setAdapter(adapter);

scrollToPosition(getAdapter().getItemRawCount() * 10000);//开始时的偏移量

}

RecyclerView有4个滑动方法:

scrollBy(x,y)

scrollToPosition(int position)

smoothScrollToPosition(int position)

scrollToPositionWithOffset(position,0)

smoothScrollToPosition 其实可以理解成一个模拟的滑动操作,会回调那个滑动监听的回调方法,有滑动效果。而 scrollToPosition 相当于直接把你想要的东西再重绘到界面上,不带滑动效果。

smoothScrollToPosition(position)和scrollToPosition(position)效果基本相似,也是把你想显示的项显示出来,只要那一项现在看得到了,那它就罢工了,

不同的是smoothScrollToPosition是平滑到你想显示的项,而scrollToPosition是直接定位显示。

scrollToPositionWithOffset(position,0)可以定位到指定项如果该项可以置顶就将其置顶显示,第二个参数可以决定 距离顶部的offset 偏移量

scrollBy(x, y)这个方法是自己去控制移动的距离,单位是像素,所以在使用scrollBy(x, y)需要自己去计算移动的高度或宽度

如果使用BCsl大BCsl/GalleryLayoutManager的自定义 LayoutManager 实现的 Gallery 可使用以下方法初始化偏移量:

GalleryLayoutManager manager = new GalleryLayoutManager(GalleryLayoutManager.HORIZONTAL);

manager.attach(recyclerView, 1000000);

滑动Item放大

实现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.433f * Math.abs(fraction); // 0.433f是放大的View面积和缩小的View面积的比值

item.setScaleX(scale);

item.setScaleY(scale);

}

ViewPager 实现GalleryView效果

继承JakeWharton/salvage大封装的可用于复用的PagerAdapterRecyclingPagerAdapter

支持View回收,美滋滋:-P

ViewPager实现GalleryView效果可无限左滑右滑

要点:

在有限的数据里面, 实现无限个Item,也就是可循环

在第一次显示的时候, 就可以左滑

滑动的Item被放大

ViewPager这里用到JakeWharton大实现的支持view的回收机制PagerAdapter RecyclingPagerAdapter继承这个PagerAdapter就可以实现类似RecyclerView的回收机制了

在有限的数据,实现循环

52e7ccbf4afd23e6a6f40cc949156d0b.png

在 ViewPager 的首尾多添加一个 View,监听 ViewPager 滚动事件,当滑到边界时,设置当前 position 为中间的某个 item,不过这种方式容易出现页面闪动导致滑动不连贯,这是因为 ViewPager#setCurrentItem(item)是需要时间来完成测量及绘制的

mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override

public void onPageSelected(int position) {

if (position < 1) {

//如果item位置小于1,也就是滑动到第0个item的位置时,则直接跳转到倒数第二个view处,并关闭跳转动画

mViewPager.setCurrentItem(mPagerAdapter.getCount() – 2, false);

} else if (position > mPagerAdapter.getCount() – 2) {

//同理如果item位置大于倒数第二个view的位置,也就是滑动到最后一个item的位置时,则直接跳转到第二个view处,并关闭跳转动画

mViewPager.setCurrentItem(1, false);

}

}

@Override

public void onPageScrollStateChanged(int state) {

}

});

在ViewPagerAdapter的方法中:

实现起来较为简单。需要注意的是,我们需要设置 ViewPager 的初始 position

@Override

public int getItemCount() {

return Integer.MAX_VALUE;

}

在第一次显示的时候, 就可以左滑

这个简单只需要在一开始的时候,产生一定的偏移量就可以左滑了

/**这里需要将setOffscreenPageLimit的值设置成数据源的总个数,设置ViewPager缓存页面数量,最小可设置成屏幕可见的个数**/

mViewPager.setOffscreenPageLimit(mPagerAdapter.getCount());

/**设置ViewPager位置**/

mViewPager.setCurrentItem(1);

滑动的Item被放大

需在根节点设置android:clipChildren为false即可,默认为true

可以通过android:layout_gravity控制超出的部分如何显示。

android:clipChildren的意思:是否限制子View在其范围内

需要在父节点和ViewPager界面设置android:clipChildren属性

setPageTransformer(boolean reverseDrawingOrder, PageTransformer transformer))方法

通过创建一个类实现ViewPager.PageTransformer然后重写transformPage方法来实现切换效果

/**

* 核心就是实现transformPage(View page, float position)这个方法

**/

@Override

public void transformPage(View page, float position) {

//以圆心进行缩放

page.setPivotX(page.getWidth() / 2.0f);

page.setPivotY(page.getHeight() / 2.0f);

float scale = 1 – 0.433f * Math.abs(position);

page.setScaleX(scale);

page.setScaleY(scale);

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {

page.getParent().requestLayout();

}

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143087.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • response的意思_python源码从哪下载

    response的意思_python源码从哪下载源码目录结构get_uniform_comparator作用:将比较器别名转换为统一名称ifcomparatorin["eq","equals",

    2022年7月31日
    6
  • python的特点和优势_Java与Python异同

    python的特点和优势_Java与Python异同Python介绍Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面…

    2022年9月17日
    2
  • java+opencv_opencv使用教程

    java+opencv_opencv使用教程opencv简介OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和MacOS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法(百度百科)。opencv安装Windows1.到OpenCV官网下…

    2022年10月3日
    0
  • VisualSVN Server的配置和使用方法

    VisualSVN Server的配置和使用方法

    2021年9月19日
    80
  • dz搬家 config_global.php 不可写入,傻瓜式Discuz论坛搬家教程

    dz搬家 config_global.php 不可写入,傻瓜式Discuz论坛搬家教程1.首先,数据的备份是很重要的,要明确这一点2.论坛搬家,备份恢复一点也不难,真的,首先不要在心里上被它吓到,dz程序为我们提供了非常便捷的几种方案大致上,搬家的方法有几种:1.第一种方法是通过phpmyadmin导出导入数据,这种方法比较鸡肋,因为超过2M的就上传不上去了,在此不多解释,不推荐2.第二种方法是通过ucenter后台自带备份恢复,这个容易遇到“无法访问该应用的备份接口,请拷贝uce…

    2022年7月25日
    7
  • qq刷屏代码可复制_QQ小程序「神奇字体」从注册到发布

    qq刷屏代码可复制_QQ小程序「神奇字体」从注册到发布QQ小程序最开始是邀请制的,在上个月差不多快中旬的时候对开发者全面开放了,把之前的微信小程序「神奇字体」搬了过去,关于微信小程序详见小程序神奇字体的从零到一。这里分享下QQ小程序从零到一的搬移过程。认证首先是去注册QQ小程序,进行认证开发者,然后才能发布小程序,大概认证了快一周左右吧。开发工具和微信小程序一样,先下了客户端。再看下微信小程序的开发界面。有没有发现不同之处。本来下完QQ…

    2022年6月10日
    181

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号