Android 自定义轮播效果 (1),kotlin 器安卓版

前言

在这里插入图片描述

在移动应用开发中,自定义的轮播效果常常被用于展示大量的内容。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 代码

package com.wust.myhorizontalscrollview;



import androidx.annotation.NonNull;



import androidx.appcompat.app.AppCompatActivity;



import androidx.viewpager.widget.PagerAdapter;



import androidx.viewpager.widget.ViewPager;



import android.os.Bundle;



import android.os.Handler;



import android.os.Message;



import android.view.View;



import android.view.ViewGroup;



import android.view.animation.AccelerateInterpolator;



import android.widget.ImageView;



import java.lang.reflect.Field;



import java.util.ArrayList;



import java.util.List;



public class MainActivity extends AppCompatActivity {
    
    



private ViewPager vp_my_viewpager;



private List<Integer> imgList;



@Override



protected void onCreate(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(new myPagerAdapter());



}



private class myPagerAdapter extends PagerAdapter {
    
    



@Override



public int getCount() {
    
    



return imgList.size();



}



@Override



public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
    
    



return view == object;



}



@NonNull



@Override



public Object instantiateItem(@NonNull ViewGroup container, int position) {
    
    



ImageView iv = new ImageView(getApplicationContext());



iv.setImageResource(imgList.get(position));



container.addView(iv);



return iv;



}



@Override



public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
    
    



container.removeView((View) object);



}



}



}

写到这里,基本的效果已经出来了

img

如果想要更酷炫的效果,那我们的主角得登场了?PagerTransformer

第三步:灵活使用?PagerTransformer

transformPage(@NonNull View page, float position)

#参数一: 视图

#参数二: 参数一视图对应的位置变化

img

经过上面的分析,我们可知我们最关心的是 屏幕显示项 + 屏幕显示项两侧布局 的动画效果,他们的 position 变化我们也通过图解描述的很清楚

package com.wust.myhorizontalscrollview;



import androidx.annotation.NonNull;



import androidx.appcompat.app.AppCompatActivity;



import androidx.viewpager.widget.PagerAdapter;



import androidx.viewpager.widget.ViewPager;



import android.os.Bundle;



import android.os.Handler;



import android.os.Message;



import android.view.View;



import android.view.ViewGroup;



import android.view.animation.AccelerateInterpolator;



import android.widget.ImageView;



import java.lang.reflect.Field;



import java.util.ArrayList;



import java.util.List;



public class MainActivity extends AppCompatActivity {
    
    



private ViewPager vp_my_viewpager;



private List<Integer> imgList;



@Override



protected void onCreate(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 入门教程指南

​ ● 前言

img

第二章 概述

​ ● 使用 Kotlin 进行服务器端开发

​ ● 使用 Kotlin 进行 Android 开发

​ ● Kotlin JavaScript 概述

​ ● Kotlin/Native 用于原生开发

​ ● 用于异步编程等场景的协程

​ ● Kotlin 1.1 的新特性

​ ● Kotlin 1.2 的新特性

​ ● Kotlin 1.3 的新特性

猜你喜欢

转载自blog.csdn.net/Android23333/article/details/131308189