android實(shí)現(xiàn)輪播圖引導(dǎo)頁
android輪播圖引導(dǎo)頁(因?yàn)槭且龑?dǎo)頁,所以不具備自動(dòng)輪播的功能)
示例:

代碼后面有數(shù)字,3.1開始就是開始做小圓點(diǎn)
//分為三個(gè)部分
(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"此屬性是讓點(diǎn)浮在圖片上放的操作 ?? ??? ?android:layout_height="wrap_content" 注意這個(gè),要不是wrap_content會(huì)使小圓點(diǎn)顯示在中間--> </RelativeLayout>
1.2下面是小圓點(diǎn)的兩個(gè)布局(大小,顏色),因?yàn)轭伾灰粯?,所以要分開定義
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;//加小圓點(diǎn),聲明線性布局
? ??
? ? 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);
? ? ? ? //調(diào)用方法完成圖片的輪播
? ? ? ? initView();
? ? }
? ? private void initView() {
? ? ? ? mViewPager = findViewById(R.id.app_lunbotu);
? ? ? ? mLunboAdapter = new LunboAdapter();
? ? ? ? mLunboAdapter.setData(sImas);//設(shè)置數(shù)據(jù)
? ? ? ? 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是否做動(dòng)畫
? ? }
? ? private void insertPoint() {
? ? ? ? //把點(diǎn)放進(jìn)去,3.3
? ? ? ? for(int i=0;i<sImas.size();i++){
? ? ? ? ? ? View point = new View(this);
? ? ? ? ? ? LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(40,40);//這是點(diǎn)的大小
? ? ? ? ? ? layoutParams.leftMargin = 20;//這是點(diǎn)之間的間距
? ? ? ? ? ? point.setLayoutParams(layoutParams);
? ? ? ? ? ? point.setBackground(getResources().getDrawable(R.drawable.shape_point_normal));//設(shè)置背景
? ? ? ? ? ? mPointContainer.addView(point);
? ? ? ? }
? ? }
? ? //以下是3.5
? ? @Override
? ? public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
? ? }
? ? @Override
? ? public void onPageSelected(int position) {
? ? ? ? //3.5
? ? ? ? //這個(gè)方法的調(diào)用其實(shí)是viewPager停下來以后選中的位置
? ? ? ? int realPosition;
? ? ? ? if(mLunboAdapter.getDataRelasize() != 0){
? ? ? ? ? ? realPosition = position%mLunboAdapter.getDataRelasize();
? ? ? ? }else{
? ? ? ? ? ? realPosition = 0;
? ? ? ? }
? ? ? ? setSelectPoint(realPosition);//3.6
? ? }
? ? private void setSelectPoint(int realPosition) {
? ? ? ? //這個(gè)方法是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());//獲取當(dāng)前的組件
? ? ? ? imageView.setImageResource(sImastwo.get(relaNum));//使無限
? ? ? ? container.addView(imageView);//將視圖添加到組件中(類似java中的操作)
? ? ? ? return imageView;
? ? }
? ? @Override
? ? public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
? ? ? ? //銷毀(讓可以循環(huán)使用,不會(huì)使內(nèi)存溢出)
? ? ? ? container.removeView((View)object);
? ? }
? ? @Override
? ? public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
? ? ? ? //判斷,View是否與instantiateItem方法返回的Object有聯(lián)系,有聯(lián)系則返回true,即返回的對(duì)象為所要?jiǎng)?chuàng)建的View時(shí),顯示該View
? ? ? ? return view == object;
? ? }
? ? public void setData(List<Integer> sImas) {
? ? ? ? //之前sImastwo是空的,現(xiàn)在已經(jīng)有圖片在里面了
? ? ? ? sImastwo=sImas;
? ? }
? ? public int getDataRelasize() {
? ? ? ? if(sImastwo != null){
? ? ? ? ? ? return sImastwo.size();
? ? ? ? }else{
? ? ? ? ? ? return 0;
? ? ? ? }
? ? }
}防止我忘記,記錄一下mipmap的位置

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)過渡動(dòng)畫、引導(dǎo)頁 Android判斷是否第一次啟動(dòng)App
- Android使用ViewPager實(shí)現(xiàn)啟動(dòng)引導(dǎo)頁
- Android開發(fā)實(shí)戰(zhàn)之漂亮的ViewPager引導(dǎo)頁
- Android開發(fā)實(shí)現(xiàn)的ViewPager引導(dǎo)頁功能(動(dòng)態(tài)加載指示器)詳解
- Android控件ViewPager實(shí)現(xiàn)帶有動(dòng)畫的引導(dǎo)頁
- Android引導(dǎo)頁面的簡(jiǎn)單實(shí)現(xiàn)
- Android實(shí)現(xiàn)漸變啟動(dòng)頁和帶有指示器的引導(dǎo)頁
- Android實(shí)現(xiàn)繞球心旋轉(zhuǎn)的引導(dǎo)頁效果
- RxJava兩步打造華麗的Android引導(dǎo)頁
- Android簡(jiǎn)單實(shí)現(xiàn)引導(dǎo)頁
相關(guān)文章
Android TV listview及焦點(diǎn)處理
這篇文章主要介紹了Android TV listview及焦點(diǎn)處理的相關(guān)資料,需要的朋友可以參考下2017-06-06
Android 布局控件之LinearLayout詳細(xì)介紹
Android 布局控件之LinearLayout詳細(xì)介紹,需要的朋友可以參考一下2013-05-05
Android 連接藍(lán)牙掃碼器無輸入框的實(shí)現(xiàn)
這篇文章主要介紹了Android 連接藍(lán)牙掃碼器無輸入框的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
解析Android截取手機(jī)屏幕兩種實(shí)現(xiàn)方案
這篇文章主要介紹了解析Android截取手機(jī)屏幕兩種實(shí)現(xiàn)方案,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04
Android Studio 多層級(jí) Module 對(duì) aar 引用問題解決方法
這篇文章主要介紹了Android Studio 多層級(jí) Module 對(duì) aar 引用問題的解決方法,需要的朋友參考下2017-12-12
Android Retrofit實(shí)現(xiàn)多圖片/文件、圖文上傳功能
Retrofit是Square開發(fā)的一個(gè)Android和Java的REST客戶端庫。這個(gè)庫非常簡(jiǎn)單并且具有很多特性,相比其他的網(wǎng)絡(luò)庫,更容易讓初學(xué)者快速掌握2017-03-03
Android開發(fā)之進(jìn)度條ProgressBar的示例代碼
本篇文章主要介紹了Android開發(fā)之進(jìn)度條ProgressBar的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03

