1.viewpager都适用于哪些?
引导页,图片浏览器,广告轮播,新闻资讯,应用导航,软件教程等等用途
2.示例代码(引导页)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical">
<androidx.viewpager.widget.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/viewpger"/>
</LinearLayout>
* 写一个自定义的PagerAdapter适配器类,继承自AndroidX的ViewPager库中的PagerAdapter类(想用时直接调取,就不用那么麻烦每次写一遍)
package com.example.main1;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import java.util.List;
public class PagerAdapter extends androidx.viewpager.widget.PagerAdapter {
private List<View> list;
public PagerAdapter(List<View> list) {
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view==object;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(list.get(position));
return list.get(position);
}
}
在layout里面创建三个xml文件分别用Imagerview放入三个图片(这里自己做就可以很简单!)
之后就可以写Activity.java文件了
package com.example.main1;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.ViewManager;
import java.util.ArrayList;
import java.util.List;
public class ViewPagerMain extends AppCompatActivity {
private ViewPager viewPager;
private List<View> data;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager_main);
viewPager=findViewById(R.id.viewpger);
data=new ArrayList<>();
data.add(getLayoutInflater().inflate(R.layout.image1,null));
data.add(getLayoutInflater().inflate(R.layout.image2,null));
data.add(getLayoutInflater().inflate(R.layout.image3,null));
viewPager.setAdapter(new PagerAdapter(data));
}
}
3.引导页效果图
4.示例代码(轮播图自动轮播)
这里我让它每2秒就过一张图片,当手指触碰图片时,则让它停止自动轮播,放开图片则让它继续自动轮播
package com.example.main1;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
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.ViewManager;
import java.util.ArrayList;
import java.util.List;
public class ViewPagerMain extends AppCompatActivity {
private ViewPager viewPager;
private List<View> data;
private Handler mHandler;
private Runnable mRunnable;
private final long DELAY_MS = 2000;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pager_main);
viewPager=findViewById(R.id.viewpger);
data=new ArrayList<>();
data.add(getLayoutInflater().inflate(R.layout.image1,null));
data.add(getLayoutInflater().inflate(R.layout.image2,null));
data.add(getLayoutInflater().inflate(R.layout.image3,null));
viewPager.setAdapter(new PagerAdapter(data));
// 创建Handler和Runnable对象
mHandler = new Handler();
mRunnable = new Runnable() {
@Override
public void run() {
int currentItem = viewPager.getCurrentItem();
int totalItems = viewPager.getAdapter().getCount();
int nextItem = (currentItem + 1) % totalItems;
viewPager.setCurrentItem(nextItem);
startAutoSlider();
}
};
// 启动自动轮播
startAutoSlider();
// 设置ViewPager的触摸监听器,用于停止自动轮播
viewPager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: //TODO 如果手指触碰图片 则停止自动轮播
case MotionEvent.ACTION_MOVE:
// 停止自动轮播
stopAutoSlider();
break;
case MotionEvent.ACTION_UP: //TODO 如果手指松开图片 则继续自动轮播
case MotionEvent.ACTION_CANCEL:
// 启动自动轮播
startAutoSlider();
break;
}
return false;
}
});
}
// 开始自动轮播
private void startAutoSlider() {
mHandler.postDelayed(mRunnable, DELAY_MS);
}
// 停止自动轮播
private void stopAutoSlider() {
mHandler.removeCallbacks(mRunnable);
}
}
4.轮播图效果图
可以的话,点点关注打赏打赏!谢谢