android 自适应图片轮播,Android使用Recyclerview实现图片轮播效果的方法
Android使用Recyclerview实现图片轮播效果的方法
发布时间:2020-06-23 15:47:58
来源:亿速云
阅读:113
作者:清晨
这篇文章将为大家详细讲解有关Android使用Recyclerview实现图片轮播效果的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
效果图:
思路:
1.准备m张图片
1.使用Recyclerview实现,返回无数个(实际Interge.MAXVALUE)item,第n个item显示第n%m张图片
3.使用recyclerview.scrollBy 每个一段时间水平滚动一段距离
4.通过layoutManager.findFirstVisibleItemPosition()获取当前显示的第一个View是第几个item,上面的ImageView显示对应de图片
实现代码:
XML文件
1.activity布局文件activity_recy.xml
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_width="300dp"
android:layout_height="350dp"
android:layout_gravity="center_horizontal"
android:id="@+id/img"
android:src="@drawable/p5"
android:scaleType="fitXY"
/>
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_marginTop="10dp"
android:id="@+id/recyclerview"
>
2.适配器布局item_horizon.xml
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
>
android:layout_width="100dp"
android:layout_height="match_parent"
android:id="@+id/img"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:scaleType="fitXY"
/>
Activity
public class HorizontalActivity extends AppCompatActivity implements RecyAdapter.OnItemClickListener {
private String TAG="HorizontalActivity";
@BindView(R.id.img)
ImageView img;
@BindView(R.id.recyclerview)
RecyclerView recyclerview;
private Integer[] mImgIds = {R.drawable.p1, R.drawable.p2, R.drawable.p3, R.drawable.p4, R.drawable.p5,
R.drawable.pic1, R.drawable.pic5, R.drawable.pic6};
private List datas;
private RecyAdapter recyAdapter;
private Handler mHandler=new Handler();
private LinearLayoutManager layoutManager;
private int oldItem=0;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recy);
ButterKnife.bind(this);
initData();
initRecy();
img.setImageResource(datas.get(0));
recyAdapter.setOnItemClickListener(this);
}
Runnable scrollRunnable=new Runnable() {
@Override
public void run() {
recyclerview.scrollBy(3,0);
// int firstItem = layoutManager.findFirstVisibleItemPosition();
int firstItem=layoutManager.findFirstVisibleItemPosition();
if(firstItem!=oldItem&&firstItem>0){
oldItem=firstItem;
img.setImageResource(datas.get(oldItem%datas.size()));
}
Log.e(TAG, "run: firstItem:"+firstItem );
mHandler.postDelayed(scrollRunnable,10);
}
};
private void initRecy() {
recyAdapter=new RecyAdapter(this,datas);
layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
recyclerview.setLayoutManager(layoutManager);
recyclerview.setAdapter(recyAdapter);
}
private void initData() {
datas=new ArrayList<>();
for (int i = 0; i
datas.add(mImgIds[i]);
}
}
@Override
protected void onResume() {
super.onResume();
mHandler.postDelayed(scrollRunnable,10);
}
@Override
protected void onStop() {
super.onStop();
mHandler.removeCallbacks(scrollRunnable);
}
@Override
public void onItemClick(View view, int tag) {
Toast.makeText(this,"第"+tag+"张图片被点击了",Toast.LENGTH_SHORT).show();
}
}
适配器RecyAdapter
public class RecyAdapter extends RecyclerView.Adapter implements View.OnClickListener {
private Context context;
private List datas;
private OnItemClickListener onItemClickListener;
public RecyAdapter(Context context, List datas) {
this.context = context;
this.datas = datas;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item_horizontal, parent, false);
ViewHolder vh=new ViewHolder(view);
view.setOnClickListener(this);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
int newPos=position%datas.size();
holder.img.setImageResource(datas.get(newPos));
holder.itemView.setTag(position);
}
@Override
public int getItemCount() {
return Integer.MAX_VALUE;
}
@Override
public void onClick(View view) {
if(onItemClickListener!=null){
onItemClickListener.onItemClick(view, (Integer) view.getTag());
}
}
class ViewHolder extends RecyclerView.ViewHolder {
ImageView img;
public ViewHolder(View itemView) {
super(itemView);
img=itemView.findViewById(R.id.img);
}
}
public void setOnItemClickListener(OnItemClickListener listener){
this.onItemClickListener=listener;
}
interface OnItemClickListener{
void onItemClick(View view,int tag);
}
}
关于Android使用Recyclerview实现图片轮播效果的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
android 自适应图片轮播,Android使用Recyclerview实现图片轮播效果的方法相关推荐
- android 下载多个图片不显示不出来,RecyclerView中图片显示不出来的两种种可能解决方法...
转载注明出处:简书-十个雨点 简单描述一下背景: 有一个页面,使用recyclerView展示一个列表,列表的每个元素是由一张图片.两个textview组成,很简单的布局.加载图片使用的的volley ...
- Android框架之路——Banner实现轮播图(RecyclerView添加Header)
一.简介 Banner能实现循环播放多个广告图片和手动滑动循环等功能.因为原生ViewPager并不支持循环翻页, 要实现循环还得需要自己去动手.Banner框架可以进行不同样式.不同动画设置, 以及 ...
- android 3d布局轮播,android 图片/视频混合轮播控件banner
android 图片/视频混合轮播控件banner 在youth5201314的图片轮播控件做的修改 原作者github地址:https://github.com/youth5201314/banne ...
- android开源轮播图框架,最好用的轮播插件框架都在这里了,Github流行轮播框架...
一般来说,一个完整的WEB项目都少不了使用JavaScript轮播插件.对于整个简单的轮播插件,有时会我们会要求它有更可控的样式,不同的使用场景也需要不同的样式,最理想的轮播插件就是可定制.除了原生开 ...
- android 自动 轮播图,Android-自定义View实现轮播图
主要步骤 1.自定义View的实现过程(测量.布局.绘制) 2.事件拦截机制方法.图片轮播时的Scroller对象使用 3.轮播图自动轮播时,Timer.TimerTask.Handler三者的结合 ...
- 微信小程序swiper图片尺寸_微信小程序之swiper轮播图中的图片自适应高度的方法...
小程序中的轮播图很简单,官方都有例子的,但是唯一的缺陷就是swiper是固定死的150px高度,这样如果传入的图片大于这个高度就会被隐藏.辣么,怎样让图片自适应不同分辨率捏. 我的思路是:获取屏幕宽度 ...
- 微信小程序swiper图片尺寸_微信小程序之swiper轮播图中的图片自适应高度
小程序中的轮播图很简单,官方都有例子的,但是唯一的缺陷就是swiper是固定死的150px高度,这样如果传入的图片大于这个高度就会被隐藏.辣么,怎样让图片自适应不同分辨率捏. 我的思路是:获取屏幕宽度 ...
- Android 宫格图控件MultiImageView(RecyclerView适配器中展示不定数量的图片)
Android 宫格图控件MultiImageView(RecyclerView适配器中展示不定数量的图片) 最近的github上的996ICU在IT界应该很多人听说了,不知道CSDN上什么是最受大家 ...
- android京东首页轮播代码,仿京东商品详情轮播图
好久没有更新啦,今天来搞一个京东的轮播:直接上效果 8月-16-2016 09-38-10.gif 8月-16-2016 09-37-17.gif 如果想真实体验可以去京东APP体验一下. 描述一下效 ...
最新文章
- Ubuntu 系统安装OpenJDK 7,openjdk8
- delete后加 limit是个好习惯么 !
- socket python实例_Python网络编程—第27课—Socket实例(0531)
- [转] Lodash
- STM32那点事(6)_定时器(上)
- 华为AI音箱更新春节专属技能:对春联 拜年留言
- AddHandler php5-script .php\AddType text/html .php和AddType application/x-httpd-php .php的区别?...
- ios11最新版本_iOS11.2.5 beta6怎么升级 哪些设备可以升级iOS11.2.5系统【详解】
- Amlogic Linux系列(三) 视频解码分析
- 《机器视觉算法与应用》第3章 机器视觉算法之数据结构——学习笔记
- JAVA刷视频代码,Java+adb命令实现自动刷视频脚本
- 百度富文本编辑器的宽度自适应
- js使用高德地图api实现定位,行政区域划分,点击事件,只显示某个省市或区,海量点标记
- 网络流量采集(一)概述
- 直流电机+L298N电机驱动模块
- 视频工具箱android,小熊视频工具箱
- 卸载计算机更新程序包,KB4343669更新包无法卸载的解决方案
- 1条命令解决使用kubeadm安装 kubernetes 从 k8s.gcr.io 拉取镜像失败的问题
- 九大免费自学编程网站,带你告别学习焦虑
- 如何缩小图片大小(手机照片怎么缩小尺寸)
热门文章
- PS制作各种证件照及换背景色
- 【NLP相关】开源中文NLP大模型及项目集合
- 国际版抖音tiktok,一个蓬勃发展阶段的社交娱乐跨境电商平台
- 如何用数学课件制作工具演示正方体展开动画
- 计算机键盘fn,USB键盘Fn功能键调节方法
- Arduino Mega2560引脚说明以及功能剖析
- 确定sw1开关信号输入端口_三菱PLC入门 | FX2N系列PLC的信号输入端子接线(图文详解)...
- /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵
- numpy中的协方差,方差相关计算
- LeetCode hot-100 简单and中等难度,31-40.