效果圖

功能代碼
創建一個集合,存盤ViewPager的四張圖片
//四張廣告圖片添加到集合中進行保存
List<View>listPics=new ArrayList<>();
//第一張
ImageView img1=new ImageView(this);
img1.setBackgroundResource(R.drawable.img1);
listPics.add(img1);
//第二張
ImageView img2=new ImageView(this);
img2.setBackgroundResource(R.drawable.img2);
listPics.add(img2);
//第三張
ImageView img3=new ImageView(this);
img3.setBackgroundResource(R.drawable.img3);
listPics.add(img3);
//第四張
ImageView img4=new ImageView(this);
img4.setBackgroundResource(R.drawable.img4);
listPics.add(img4);
動態設定ViewPager右下角四個小圓點的屬性
//動態設定四個圓點的屬性
indicators=new ImageView[listPics.size()];
//遍歷該陣列一個個動態加載
for (int i=0;i<indicators.length;i++){
indicator=new ImageView(this);
//設定這張圖片在布局中的引數(指定寬度和高度)
indicator.setLayoutParams(new LinearLayout.LayoutParams(40,40));
//小圓點的間隔
indicator.setPadding(5,5,5,5);
//
indicators[i]=indicator;
if (i==0){
indicators[i].setBackgroundResource(R.drawable.dian_f);
}else {
indicators[i].setBackgroundResource(R.drawable.dian_b);
}
group.addView(indicators[i]);
}
設定viewPager的監聽器
//設定viewPager的監聽器
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
//當頁面翻滾
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//當頁面被選中
@Override
public void onPageSelected(int position) {
//記錄當前位置
// index.getAndSet(position);
for (int i=0;i<indicators.length;i++){
//如果陣列的當前下標就是當前位置
if (i==position){
indicators[i].setBackgroundResource(R.drawable.dian_f);
}else {
indicators[i].setBackgroundResource(R.drawable.dian_b);
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
配接器
//創建一個配接器
class MyPagerAdapter extends PagerAdapter{
private List<View>viewList;
//將集合作為構造方法的引數傳遞進來
public MyPagerAdapter(List<View>viewList){
this.viewList=viewList;
}
@Override
public int getCount() {
return viewList.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view==object;
}
//視圖的創建,創建每一頁viewpager的時候instantiateItem將會被自動呼叫
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(viewList.get(position),0);
return viewList.get(position);
}
//視圖的移除
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(viewList.get(position));
}
}
自動翻頁功能(兩秒)
使用多執行緒
//使用多執行緒自動定時切換page
new Thread(new Runnable() {
@Override
public void run() {
while (true){
//回圈一直執行,每隔兩秒,通過Handler,發出一條訊息帶去當前ViewPager所顯示的頁的索引號
if (isContinue){
viewHandler.sendEmptyMessage(index.get());
whatOption();
}
}
}
}).start();
}
private void whatOption(){
index.incrementAndGet();//將當前位置值加1
if (index.get()>indicators.length-1){
index.getAndAdd(-4);
}
//設定一個執行緒每隔兩秒啟動
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
宣告一個 Handler,接收指令并更換視圖
private Handler viewHandler=new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
//將當前的msg.what,也就是index的值置為當前page的值
viewPager.setCurrentItem(msg.what);
}
};
監聽viewPager按壓,如果按壓則停止執行緒,放開則繼續
viewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()){
//如果狀態為壓下,則停止
case MotionEvent.ACTION_DOWN:
isContinue=false;
break;
case MotionEvent.ACTION_UP:
isContinue=true;
break;
}
return false;
}
});
全部代碼
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.viewpager.widget.ViewPager
android:id="@+id/vp_adv"
android:layout_width="match_parent"
android:layout_height="160dp">
</androidx.viewpager.widget.ViewPager>
<LinearLayout
android:id="@+id/view_indicators"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/vp_adv"
android:layout_marginTop="-25dp"
android:gravity="right"
android:orientation="horizontal">
</LinearLayout>
</RelativeLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.java
package com.cdw.study6;
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.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
public class MainActivity extends AppCompatActivity {
private ImageView indicator;//表示圓點指示器
private ImageView[] indicators;//保存四個圓點指示器的陣列
private boolean isContinue=true;
private ViewPager viewPager;
private ViewGroup group;
private AtomicInteger index=new AtomicInteger();
private Handler viewHandler=new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
//將當前的msg.what,也就是index的值置為當前page的值
viewPager.setCurrentItem(msg.what);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView(){
viewPager=findViewById(R.id.vp_adv);
group=findViewById(R.id.view_indicators);
//四張廣告圖片添加到集合中進行保存
List<View>listPics=new ArrayList<>();
//第一張
ImageView img1=new ImageView(this);
img1.setBackgroundResource(R.drawable.img1);
listPics.add(img1);
//第二張
ImageView img2=new ImageView(this);
img2.setBackgroundResource(R.drawable.img2);
listPics.add(img2);
//第三張
ImageView img3=new ImageView(this);
img3.setBackgroundResource(R.drawable.img3);
listPics.add(img3);
//第四張
ImageView img4=new ImageView(this);
img4.setBackgroundResource(R.drawable.img4);
listPics.add(img4);
//動態設定四個圓點的屬性
indicators=new ImageView[listPics.size()];
//遍歷該陣列一個個動態加載
for (int i=0;i<indicators.length;i++){
indicator=new ImageView(this);
//設定這張圖片在布局中的引數(指定寬度和高度)
indicator.setLayoutParams(new LinearLayout.LayoutParams(40,40));
//小圓點的間隔
indicator.setPadding(5,5,5,5);
//
indicators[i]=indicator;
if (i==0){
indicators[i].setBackgroundResource(R.drawable.dian_f);
}else {
indicators[i].setBackgroundResource(R.drawable.dian_b);
}
group.addView(indicators[i]);
}
//設定viewPager的配接器
viewPager.setAdapter(new MyPagerAdapter(listPics));
//設定viewPager的監聽器
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
//當頁面翻滾
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//當頁面被選中
@Override
public void onPageSelected(int position) {
//記錄當前位置
// index.getAndSet(position);
for (int i=0;i<indicators.length;i++){
//如果陣列的當前下標就是當前位置
if (i==position){
indicators[i].setBackgroundResource(R.drawable.dian_f);
}else {
indicators[i].setBackgroundResource(R.drawable.dian_b);
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
viewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()){
//如果狀態為壓下,則停止
case MotionEvent.ACTION_DOWN:
isContinue=false;
break;
case MotionEvent.ACTION_UP:
isContinue=true;
break;
}
return false;
}
});
//使用多執行緒自動定時切換page
new Thread(new Runnable() {
@Override
public void run() {
while (true){
//回圈一直執行,每隔兩秒,通過Handler,發出一條訊息帶去當前ViewPager所顯示的頁的索引號
if (isContinue){
viewHandler.sendEmptyMessage(index.get());
whatOption();
}
}
}
}).start();
}
private void whatOption(){
index.incrementAndGet();//將當前位置值加1
if (index.get()>indicators.length-1){
index.getAndAdd(-4);
}
//設定一個執行緒每隔兩秒啟動
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//創建一個配接器
class MyPagerAdapter extends PagerAdapter{
private List<View>viewList;
//將集合作為構造方法的引數傳遞進來
public MyPagerAdapter(List<View>viewList){
this.viewList=viewList;
}
@Override
public int getCount() {
return viewList.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view==object;
}
//視圖的創建,創建每一頁viewpager的時候instantiateItem將會被自動呼叫
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(viewList.get(position),0);
return viewList.get(position);
}
//視圖的移除
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(viewList.get(position));
}
}
萬分感謝您在百忙之中閱讀此文
結束
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/286621.html
標籤:其他
