## activity_main
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="150dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal"
android:padding="10dp"
android:background="#88f4f4e5"
android:layout_alignBottom="@+id/pager">
<TextView
android:id="@+id/tv_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#fff"
android:text="我是小饼干儿"/>
<LinearLayout
android:id="@+id/linear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!--<view
android:layout_width="5dp"
android:layout_height="5dp"
android:background="#dd6ac4ca"/>-->
</LinearLayout>
</LinearLayout>
MainActivity
package wanghuiqi.bawie.com.viewpager;
import android.annotation.SuppressLint;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
//将ViewPager定义成全局变量 方便实用
private ArrayList<ImageView> imgList=new ArrayList<>();
//图片int数组资源
private int[] imageIds={
R.drawable.a,
R.drawable.b,
R.drawable.d,
R.drawable.e,
};
//图片字符串数组String[]资源
private String[] textRes={
"你咋不上天呢",
"不能因为我可爱就欺负我",
"有没有兴趣来一场直达天堂的交往",
"天下最帅,无人能比",
};
private ViewPager pager;
private TextView tvText;
private LinearLayout linear;
//创建handler,通过msg.what获得标识
@SuppressLint("HandlerLeak")
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 1:
//得到当前ViewPager和用户交互的item条目
int currentItem = pager.getCurrentItem();
//设置ViewPag当前显示的页面
pager.setCurrentItem(currentItem+1);
//延时
sendEmptyMessageDelayed(1,3000);
break;
default:
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
initData();
}
//初始化控件
private void initData() {
pager = findViewById(R.id.pager);
tvText = findViewById(R.id.tv_text);
//进行圆点添加
linear = findViewById(R.id.linear);
//创建动态ImageView控件,有几张图片就创建几个ImageView
for(int i=0;i<imageIds.length;i++){
//创建ImageView对象
ImageView image = new ImageView(this);
//添加图片资源
image.setBackgroundResource(imageIds[i]);
//把空件添加到集合ImageView中
imgList.add(image);
//进行圆点添加,个数和图片个数一致,因此放到循环中
createDot(i);
}
设置滑动监听
//设置适配器
pager.setAdapter(new MyPagerAdapter());
//设置Viewpager的滑动监听器
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
//item的位置
int currentItem = pager.getCurrentItem();
//给Text和圆点进行选中的位置
changeTextAndDot(currentItem%imageIds.length);
}
@Override
public void onPageSelected(int i) {
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
//指定ViewPager默认跳转到某页
pager.setCurrentItem(Integer.MAX_VALUE/2-3);
//通过handler,3秒后开始循环
handler.sendEmptyMessageDelayed(1,3000);
//设置触摸事件
ViewPagerEvent();
}
触摸事件
//触摸事件,用户触摸不再自动播放,
@SuppressLint("ClickableViewAccessibility")
private void ViewPagerEvent() {
pager.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
handler.removeMessages(1);
break;
case MotionEvent.ACTION_MOVE:
handler.removeMessages(1);
break;
//当用户抬起时,继续发送
case MotionEvent.ACTION_UP:
handler.sendEmptyMessageDelayed(1,3000);
default:
break;
}
return false;
}
});
}
//销毁
@Override
protected void onDestroy() {
super.onDestroy();
handler.removeMessages(1);
}
根据圆点滑动改变文本
private void changeTextAndDot(int position) {
//根据item的变化设置对应的文本
tvText.setText(textRes[position]);
//对圆点进行判断是否是当前页
for (int i=0;i<imageIds.length;i++){
//拿到容器的子控件
View childAt = linear.getChildAt(i);
//设置背景图片,使用三元运算
childAt.setBackgroundResource(i==position?R.drawable.red_dot:R.drawable.white_dot);
}
}
动态创建圆点
//增加图片资源的数量,动态的创建圆点
private void createDot(int x){
//创建一个View对象
View view=new View(this);
//设置背景
view.setBackgroundResource(R.drawable.red_dot);
//设置宽高参数
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(8, 8);
//使用参数设置margin
layoutParams.leftMargin=8;
//设置给View对象
view.setLayoutParams(layoutParams);
//最后容器对象
linear.addView(view);
}
Adapter
class MyPagerAdapter extends PagerAdapter{
@Override
public int getCount() {
//把返回的条目设置 为无限大
return Integer.MAX_VALUE;
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view==o;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
//根据条目所在位置,从ImageView集合里获取相对应的图片
ImageView imageView = imgList.get(position%imageIds.length);
//添加给ViewPager
container.addView(imageView);
//添加什么空间,就返回该控件
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View)object);
}
}
}