android实现轮播图引导页
作者:night 猿
这篇文章主要为大家详细介绍了android实现轮播图引导页,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
android轮播图引导页(因为是引导页,所以不具备自动轮播的功能)
示例:
代码后面有数字,3.1开始就是开始做小圆点
//分为三个部分
(1)布局
activity_lun_bo_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <androidx.viewpager.widget.ViewPager android:id="@+id/app_lunbotu" android:layout_width="match_parent" android:layout_height="wrap_content"/> <LinearLayout android:id="@+id/app_points_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginBottom="40px" android:gravity="center" android:orientation="horizontal"> </LinearLayout> <!-- android:layout_alignParentBottom="true"此属性是让点浮在图片上放的操作 android:layout_height="wrap_content" 注意这个,要不是wrap_content会使小圆点显示在中间--> </RelativeLayout>
1.2下面是小圆点的两个布局(大小,颜色),因为颜色不一样,所以要分开定义
shape_point_normal.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <!-- shape="oval"圆形--> <size android:width="40px" android:height="40px"/> <solid android:color="#dfdfdf"/> </shape>
shape_point_selected.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:width="40px" android:height="40px"/> <solid android:color="#ff4300"/> </shape>
LunBoMainActivity
(2)第二步(主要MainActivity)
package com.example.myapplication.lunbotu; import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.ViewPager; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.LinearLayout; import com.example.myapplication.R; import java.util.ArrayList; import java.util.List; public class LunBoMainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener { private ViewPager mViewPager; private LunboAdapter mLunboAdapter;//适配器 private static List<Integer> sImas= new ArrayList<>();//装图片的列表 private LinearLayout mPointContainer;//加小圆点,声明线性布局 static { //这是四张图片 sImas.add(R.mipmap.yingdao1); sImas.add(R.mipmap.yingdao2); sImas.add(R.mipmap.yingdao3); sImas.add(R.mipmap.yingdao4); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_lun_bo_main); //调用方法完成图片的轮播 initView(); } private void initView() { mViewPager = findViewById(R.id.app_lunbotu); mLunboAdapter = new LunboAdapter(); mLunboAdapter.setData(sImas);//设置数据 mViewPager.setAdapter(mLunboAdapter); //以上四步是普通的轮播图 mViewPager.addOnPageChangeListener(this);//3.4 mPointContainer = findViewById(R.id.app_points_container);//3.2 insertPoint();//3.1 //下面这一步是无限轮播图 mViewPager.setCurrentItem(mLunboAdapter.getDataRelasize()*100,false);//false是否做动画 } private void insertPoint() { //把点放进去,3.3 for(int i=0;i<sImas.size();i++){ View point = new View(this); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(40,40);//这是点的大小 layoutParams.leftMargin = 20;//这是点之间的间距 point.setLayoutParams(layoutParams); point.setBackground(getResources().getDrawable(R.drawable.shape_point_normal));//设置背景 mPointContainer.addView(point); } } //以下是3.5 @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { //3.5 //这个方法的调用其实是viewPager停下来以后选中的位置 int realPosition; if(mLunboAdapter.getDataRelasize() != 0){ realPosition = position%mLunboAdapter.getDataRelasize(); }else{ realPosition = 0; } setSelectPoint(realPosition);//3.6 } private void setSelectPoint(int realPosition) { //这个方法是3.6 for (int i=0;i<mPointContainer.getChildCount();i++){ View point = mPointContainer.getChildAt(i); if(i != realPosition){ //那就是白色 point.setBackgroundResource(R.drawable.shape_point_normal); }else { //选中的颜色 point.setBackgroundResource(R.drawable.shape_point_selected); } } } @Override public void onPageScrollStateChanged(int state) { } }
LunboAdapter
(3)第三步(适配器)
package com.example.myapplication.lunbotu; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.PagerAdapter; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import java.util.List; public class LunboAdapter extends PagerAdapter { private List<Integer> sImastwo ; @Override public int getCount() { if(sImastwo != null){ return Integer.MAX_VALUE;//(图片无限)(注意这里是Integer) } return 0; } @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { int relaNum = position%sImastwo.size(); ImageView imageView = new ImageView(container.getContext());//获取当前的组件 imageView.setImageResource(sImastwo.get(relaNum));//使无限 container.addView(imageView);//将视图添加到组件中(类似java中的操作) return imageView; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { //销毁(让可以循环使用,不会使内存溢出) container.removeView((View)object); } @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { //判断,View是否与instantiateItem方法返回的Object有联系,有联系则返回true,即返回的对象为所要创建的View时,显示该View return view == object; } public void setData(List<Integer> sImas) { //之前sImastwo是空的,现在已经有图片在里面了 sImastwo=sImas; } public int getDataRelasize() { if(sImastwo != null){ return sImastwo.size(); }else{ return 0; } } }
防止我忘记,记录一下mipmap的位置
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。