android實(shí)現(xiàn)輪播圖引導(dǎo)頁(yè)
android輪播圖引導(dǎo)頁(yè)(因?yàn)槭且龑?dǎo)頁(yè),所以不具備自動(dòng)輪播的功能)
示例:
代碼后面有數(shù)字,3.1開(kāi)始就是開(kāi)始做小圓點(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)轭伾灰粯?,所以要分開(kāi)定義
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 ? ? ? ? //下面這一步是無(wú)限輪播圖 ? ? ? ? mViewPager.setCurrentItem(mLunboAdapter.getDataRelasize()*100,false);//false是否做動(dòng)畫(huà) ? ? } ? ? 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停下來(lái)以后選中的位置 ? ? ? ? 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;//(圖片無(wú)限)(注意這里是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));//使無(wú)限 ? ? ? ? container.addView(imageView);//將視圖添加到組件中(類(lèi)似java中的操作) ? ? ? ? return imageView; ? ? } ? ? @Override ? ? public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { ? ? ? ? //銷(xiāo)毀(讓可以循環(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)過(guò)渡動(dòng)畫(huà)、引導(dǎo)頁(yè) Android判斷是否第一次啟動(dòng)App
- Android使用ViewPager實(shí)現(xiàn)啟動(dòng)引導(dǎo)頁(yè)
- Android開(kāi)發(fā)實(shí)戰(zhàn)之漂亮的ViewPager引導(dǎo)頁(yè)
- Android開(kāi)發(fā)實(shí)現(xiàn)的ViewPager引導(dǎo)頁(yè)功能(動(dòng)態(tài)加載指示器)詳解
- Android控件ViewPager實(shí)現(xiàn)帶有動(dòng)畫(huà)的引導(dǎo)頁(yè)
- Android引導(dǎo)頁(yè)面的簡(jiǎn)單實(shí)現(xiàn)
- Android實(shí)現(xiàn)漸變啟動(dòng)頁(yè)和帶有指示器的引導(dǎo)頁(yè)
- Android實(shí)現(xiàn)繞球心旋轉(zhuǎn)的引導(dǎo)頁(yè)效果
- RxJava兩步打造華麗的Android引導(dǎo)頁(yè)
- Android簡(jiǎn)單實(shí)現(xiàn)引導(dǎo)頁(yè)
相關(guān)文章
Android TV listview及焦點(diǎn)處理
這篇文章主要介紹了Android TV listview及焦點(diǎn)處理的相關(guān)資料,需要的朋友可以參考下2017-06-06Android 布局控件之LinearLayout詳細(xì)介紹
Android 布局控件之LinearLayout詳細(xì)介紹,需要的朋友可以參考一下2013-05-05Android 連接藍(lán)牙掃碼器無(wú)輸入框的實(shí)現(xiàn)
這篇文章主要介紹了Android 連接藍(lán)牙掃碼器無(wú)輸入框的實(shí)現(xiàn),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02解析Android截取手機(jī)屏幕兩種實(shí)現(xiàn)方案
這篇文章主要介紹了解析Android截取手機(jī)屏幕兩種實(shí)現(xiàn)方案,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-04-04Android Studio 多層級(jí) Module 對(duì) aar 引用問(wèn)題解決方法
這篇文章主要介紹了Android Studio 多層級(jí) Module 對(duì) aar 引用問(wèn)題的解決方法,需要的朋友參考下2017-12-12Android Retrofit實(shí)現(xiàn)多圖片/文件、圖文上傳功能
Retrofit是Square開(kāi)發(fā)的一個(gè)Android和Java的REST客戶(hù)端庫(kù)。這個(gè)庫(kù)非常簡(jiǎn)單并且具有很多特性,相比其他的網(wǎng)絡(luò)庫(kù),更容易讓初學(xué)者快速掌握2017-03-03Android開(kāi)發(fā)之進(jìn)度條ProgressBar的示例代碼
本篇文章主要介紹了Android開(kāi)發(fā)之進(jìn)度條ProgressBar的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03