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的位置

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android实现绕球心旋转的引导页效果

    现在很多APP都会出现Android实现绕球心旋转的引导页效果,一个类似小车一直在往前开的旋转式动画效果. 先看一下预览效果: 嗯,整体效果还算理想,基本实现了页面绕屏幕底部中心旋转. 这里我们用到了Android系统的一个组件ViewFlipper,该控件的主要作用是为其中的View切换提供动画效果,主要的方法如下: setInAnimation:设置View进入屏幕时的动画. setOutAnimation:设置View退出屏幕时的动画. showNext:调用该方法可以显示下一个View.

  • Android简单实现引导页

    本文实例为大家分享了Android简单实现引导页的具体代码,供大家参考,具体内容如下 一.思路 我们选择ViewPager + View + ImageView 来实现引导页效果,ViewPager用来实现滑动,View则是用来显示每页的图像,而ImageView则是用来实现下面的小红点. 二.XML代码 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&qu

  • Android开发实战之漂亮的ViewPager引导页

    目前很多软件安装时都会出现引导页面,用户体验很好. 下面就来DIY下: 因为视频上传很麻烦,所以截图了. 首先看看效果图: 点击小点可自由切换,滑动也可以自由切换,最后一个导航页添加了点击跳转. 开始实现引导页: 一.采集需要的图片放入drawable文件里 二.初始化每个导航页的视图 import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.suppo

  • RxJava两步打造华丽的Android引导页

    前言 之前的一篇文章:基于RxJava实现酷炫启动页 中,我们尝试了用RxJava实现酷炫的启动页,今天我们在此基础上加入首次使用APP时的引导页功能. 效果如下图: 思路:思路其实很简单,就是在WelcomeActivity 中setContentView()之前判断是否是首次打开APP,若是,则去启动引导页(WelcomeGuideActivity)并return:若不是,则直接setContentView(),然后启动动画再启动MainActivity. 一.WelcomeActivity

  • Android开发实现的ViewPager引导页功能(动态加载指示器)详解

    本文实例讲述了Android开发实现的ViewPager引导页功能(动态加载指示器).分享给大家供大家参考,具体如下: 先看效果图咯~ 现在几乎每个App都会有引导页,是不是感觉很炫很厉害,所以就想做出来一个学习一下~让自己的App看起来更加的美观~ 现在来分析一下: 这个引导页可以分为俩部分~ 1.小红点--来提醒这是第几页了~ 2."开始体验"这个Button--可以进入主界面,但是要控制这个Button只能在最后一页出现 布局的话使用相对布局~ 那现在来看看布局吧: activi

  • Android启动引导页使用ViewPager实现

    我们在安装某个APP的时候,基本都会有一个引导页的提示,他们可以打广告,或者介绍新功能的加入和使用说明等. 一般都支持滑动并且下面有几个点,显示共有多少页和当前图片的位置,在IOS上这个实现起来比较简单,但在安卓上如何实现呢. 今天就和大家一起来学习用官方v4支持包下的ViewPager来实现这个效果. 先上图: 下面是我的实现,一个xml布局,一个GuideActivity和一个GuidePageAdapter.  先上XML. <?xml version="1.0" enco

  • Android实现渐变启动页和带有指示器的引导页

    引导页是项目中很常见的东西了,在用户下载app首次打开后,会进入引导界面,通常都是三四张图片说明,简单介绍下app的功能和使用方法之类,最后一张有着"进入应用"的按钮,点击即可进入主页,之后打开app则不会再次进入启动页,话不多说,以下做个归纳. 效果图: 实现步骤: 1.首先我们做个有渐变动画的启动页面SplashActivity 在onCreate里设置核心方法setAlphaAnimation() public void setAlphaAnimation(){ //生成Alph

  • Android引导页面的简单实现

    第一次进入应用的时候,都会有一个引导页面,引导页面的实现起来也很简单,实现的方式也有很多,下面是自己写的一个引导页面的效果,大致的实现思路为: 最外层是一个FragmentActivity,里面包含4个fragment,在fragment中给ViewPager开一个循环,这样实现了图片播,其实效果就是在FragmentActivity中几个fragment滑动切换, fragment中ViewPager无限轮播和滑动切换: 下面为代码实现: public class MainActivity e

  • Android实现过渡动画、引导页 Android判断是否第一次启动App

    目前的App在安装后,第一次打开,都会显示两秒左右的logo,然后进入引导页.如果关闭App,再重新打开,则只会显示logo,然后直接进入主页. 最近写了这个,记录一下. 首先是过渡动画,因为它不论App是否第一次启动都会显示. 这里我使用了Handler的postDelayed()方法.把过渡动画的Activity设为默认启动的Activity.在当前Activity中,执行postDelayed()方法,把延时的时长设为两秒即可. 过渡页面如下:transition_view.xml <?x

  • Android控件ViewPager实现带有动画的引导页

    ViewPager实现带有动画的引导页,供大家参考,具体内容如下 好了,又到我们学习基础控件的时候了,其实引导页很简单,就是五张图片而已 一.ViewPager实现传统的引导页 传统的ViewPager实现引导页和ListView是一样道理的,只是把ListView的Item换成图片,把BaseAdapter换成PagerAdapter,我们先来看下传统引导页的效果图 步骤一:编写xml文件 既然用到的是ViewPager,那么xml文件就必须要有ViewPager,细心的你,可能会发现最后一页

随机推荐