,kotlin 器安卓版)
前言在移动应用开发中自定义的轮播效果常常被用于展示大量的内容。Android的轮播图设计允许开发者在有限的空间内展示更多的内容而不需要多次重新加载整个页面。在这篇文章中我们将学习如何使用Kotlin编译器安卓版来实现一个自定义的轮播效果。android:layout_width0dpandroid:layout_height70dpandroid:layout_weight1android:layout_gravitybottom//子控件配合android:srcmipmap/ic_launcher/ImageView android:layout_width0dpandroid:layout_heightmatch_parentandroid:layout_weight1android:srcmipmap/ic_launcher/ImageView android:layout_width0dpandroid:layout_heightmatch_parentandroid:layout_weight1android:srcmipmap/ic_launcher//LinearLayout/LinearLayout了解?PagerTransformer第一步写布局注意点根布局 和 ViewPager 都得加?clipChildren “false 属性缺一不可?xml version1.0encodingutf-8?LinearLayout xmlns:android[http://schemas.android.com/apk/res/android](https://xie.infoq.cn/link?targethttp%3A%2F%2Fschemas.android.com%2Fapk%2Fres%2Fandroid)xmlns:app[http://schemas.android.com/apk/res-auto](https://xie.infoq.cn/link?targethttp%3A%2F%2Fschemas.android.com%2Fapk%2Fres-auto)xmlns:tools[http://schemas.android.com/tools](https://xie.infoq.cn/link?targethttp%3A%2F%2Fschemas.android.com%2Ftools)android:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationhorizontalandroid:clipChildrenfalse//不能少tools:context.MainActivityandroidx.viewpager.widget.ViewPager android:idid/vp_my_viewpagerandroid:layout_widthmatch_parentandroid:layout_height200dpandroid:layout_marginLeft80dp//写这个属性的目的是 不能让单个 ViewPager 项占满整个横屏android:layout_marginRight80dpandroid:clipChildrenfalse//不能少//LinearLayout第二步写 java 代码packagecom.wust.myhorizontalscrollview;importandroidx.annotation.NonNull;importandroidx.appcompat.app.AppCompatActivity;importandroidx.viewpager.widget.PagerAdapter;importandroidx.viewpager.widget.ViewPager;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Message;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.animation.AccelerateInterpolator;importandroid.widget.ImageView;importjava.lang.reflect.Field;importjava.util.ArrayList;importjava.util.List;publicclassMainActivity extends AppCompatActivity{privateViewPager vp_my_viewpager;privateListIntegerimgList;OverrideprotectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//准备图片资源imgListnew ArrayList();imgList.add(R.drawable.test);imgList.add(R.drawable.test2);imgList.add(R.drawable.test);imgList.add(R.drawable.test2);imgList.add(R.drawable.test);//第一步找到 ViewPager 这个控件vp_my_viewpagerfindViewById(R.id.vp_my_viewpager);//第二步设置 ViewPager 的一些属性// 这个属性的目的 是设置 预加载 3 张 防止 滚动时出现断层vp_my_viewpager.setOffscreenPageLimit(3);// 这个属性的目的 是设置 每个 Item 之间的距离间隔vp_my_viewpager.setPageMargin(10);//第三步设置适配器vp_my_viewpager.setAdapter(newmyPagerAdapter());}privateclassmyPagerAdapter extends PagerAdapter{OverridepublicintgetCount(){returnimgList.size();}OverridepublicbooleanisViewFromObject(NonNullView view,NonNullObjectobject){returnviewobject;}NonNullOverridepublicObjectinstantiateItem(NonNullViewGroup container,int position){ImageView ivnewImageView(getApplicationContext());iv.setImageResource(imgList.get(position));container.addView(iv);returniv;}OverridepublicvoiddestroyItem(NonNullViewGroup container,int position,NonNullObjectobject){container.removeView((View)object);}}}写到这里基本的效果已经出来了如果想要更酷炫的效果那我们的主角得登场了?PagerTransformer第三步灵活使用?PagerTransformertransformPage(NonNull View page, float position)#参数一 视图#参数二 参数一视图对应的位置变化经过上面的分析我们可知我们最关心的是 屏幕显示项 屏幕显示项两侧布局 的动画效果他们的 position 变化我们也通过图解描述的很清楚packagecom.wust.myhorizontalscrollview;importandroidx.annotation.NonNull;importandroidx.appcompat.app.AppCompatActivity;importandroidx.viewpager.widget.PagerAdapter;importandroidx.viewpager.widget.ViewPager;importandroid.os.Bundle;importandroid.os.Handler;importandroid.os.Message;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.animation.AccelerateInterpolator;importandroid.widget.ImageView;importjava.lang.reflect.Field;importjava.util.ArrayList;importjava.util.List;publicclassMainActivity extends AppCompatActivity{privateViewPager vp_my_viewpager;privateListIntegerimgList;OverrideprotectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//准备图片资源imgListnew ArrayList();imgList.add(R.drawable.test);imgList.add(R.drawable.test2);imgList.add(R.drawable.test);imgList.add(R.drawable.test2);imgList.add(R.drawable.test);//第一步找到 ViewPager 这个控件vp_my_viewpagerfindViewById(R.id.vp_my_viewpager);//第二步设置 ViewPager 的一些属性// 这个属性的目的 是设置 预加载 3 张 防止 滚动时出现断层vp_my_viewpager.setOffscreenPageLimit(3);// 这个属性的目的 是设置 每个 Item 之间的距离间隔vp_my_viewpager.setPageMargin(0);在这里为了方便大家系统的学习Kotlin这里特意联合了阿里P7架构师和谷歌技术团队共同整理了一份Kotlin全家桶学习资料。内容概要Kotlin 入门教程指南、高级Kotlin强化实战和史上最详Android版kotlin协程入门进阶实战 。内容特点条理清晰含图像化表示更加易懂。由于文章内容比较多篇幅有限资料已经被整理成了PDF文档有需要 Android中高级面试必知必会 完整文档的可扫描下方卡片免费获取《Kotlin入门教程指南》第一章 Kotlin 入门教程指南 ● 前言第二章 概述 ● 使用 Kotlin 进行服务器端开发 ● 使用 Kotlin 进行 Android 开发 ● Kotlin JavaScript 概述 ● Kotlin/Native 用于原生开发 ● 用于异步编程等场景的协程 ● Kotlin 1.1 的新特性 ● Kotlin 1.2 的新特性 ● Kotlin 1.3 的新特性