前言
在移动应用开发中,自定义的轮播效果常常被用于展示大量的内容。Android的轮播图设计允许开发者在有限的空间内展示更多的内容,而不需要多次重新加载整个页面。在这篇文章中,我们将学习如何使用Kotlin编译器安卓版来实现一个自定义的轮播效果。
android:layout_width="0dp"android:layout_height="70dp"android:layout_weight="1"android:layout_gravity="bottom"//子控件配合android:src="@mipmap/ic_launcher"/><ImageView android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:src="@mipmap/ic_launcher"/><ImageView android:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:src="@mipmap/ic_launcher"/></LinearLayout></LinearLayout>了解?PagerTransformer===================
第一步:写布局
注意点:根布局 和 ViewPager 都得加?clipChildren = “false" 属性,缺一不可
<?xml version="1.0"encoding="utf-8"?><LinearLayout xmlns:android="[http://schemas.android.com/apk/res/android](https://xie.infoq.cn/link?target=http%3A%2F%2Fschemas.android.com%2Fapk%2Fres%2Fandroid)"xmlns:app="[http://schemas.android.com/apk/res-auto](https://xie.infoq.cn/link?target=http%3A%2F%2Fschemas.android.com%2Fapk%2Fres-auto)"xmlns:tools="[http://schemas.android.com/tools](https://xie.infoq.cn/link?target=http%3A%2F%2Fschemas.android.com%2Ftools)"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal"android:clipChildren="false"//不能少tools:context=".MainActivity"><androidx.viewpager.widget.ViewPager android:id="@+id/vp_my_viewpager"android:layout_width="match_parent"android:layout_height="200dp"android:layout_marginLeft="80dp"//写这个属性的目的是 不能让单个 ViewPager 项占满整个横屏android:layout_marginRight="80dp"android:clipChildren="false"//不能少/></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;privateList<Integer>imgList;@OverrideprotectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//准备图片资源imgList=new 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_viewpager=findViewById(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){returnview==object;}@NonNull@OverridepublicObjectinstantiateItem(@NonNullViewGroup container,int position){ImageView iv=newImageView(getApplicationContext());iv.setImageResource(imgList.get(position));container.addView(iv);returniv;}@OverridepublicvoiddestroyItem(@NonNullViewGroup container,int position,@NonNullObjectobject){container.removeView((View)object);}}}写到这里,基本的效果已经出来了
如果想要更酷炫的效果,那我们的主角得登场了?PagerTransformer
第三步:灵活使用?PagerTransformer
transformPage(@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;privateList<Integer>imgList;@OverrideprotectedvoidonCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//准备图片资源imgList=new 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_viewpager=findViewById(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 的新特性