,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 的新特性