MainActivity
package com.example.viewpagerzidong; import android.os.Handler; import android.os.Message; 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.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { TextView text; ViewPager viewpager; LinearLayout button; List<ImageView> imageViews = new ArrayList<>(); Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); int currentitem = viewpager.getCurrentItem(); currentitem++; viewpager.setCurrentItem(currentitem); handler.sendEmptyMessageDelayed(1,1000); } }; private int[] ints={ R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e }; private String[] strings={ "111", "222", "333", "444", "555" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); text = findViewById(R.id.text); viewpager = findViewById(R.id.viewpager); button = findViewById(R.id.button); inint(); } private void inint() { for (int x = 0 ; x < ints.length ; x++){ ImageView imageView = new ImageView(this); imageView.setImageResource(ints[x]); imageViews.add(imageView); setButton(); } MAdapter adapter = new MAdapter(this); adapter.setdata(imageViews); viewpager.setAdapter(adapter); viewpager.setCurrentItem(Integer.MAX_VALUE/2-3); viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i1) { int currentItem = viewpager.getCurrentItem(); text.setText(strings[currentItem % ints.length]); for (int x = 0 ; x < ints.length ; x++){ View childAt = button.getChildAt(x); childAt.setBackgroundResource(x == currentItem % ints.length ? R.drawable.dot_focus:R.drawable.dot_normal); } } @Override public void onPageSelected(int i) { } @Override public void onPageScrollStateChanged(int i) { } }); handler.sendEmptyMessageDelayed(1,1000); viewpager.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch(motionEvent.getAction()){ case MotionEvent.ACTION_DOWN: handler.removeMessages(1); break; case MotionEvent.ACTION_MOVE: handler.removeMessages(1); break; case MotionEvent.ACTION_UP: handler.sendEmptyMessageDelayed(1,1000); break; default: break; } return false; } }); } private void setButton() { ImageView view = new ImageView(this); view.setImageResource(R.drawable.dot_normal); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(8, 8); params.leftMargin=8; view.setLayoutParams(params); button.addView(view); } @Override protected void onPause() { super.onPause(); handler.removeMessages(1); } }adapter
package com.example.viewpagerzidong; import android.content.Context; import android.support.annotation.NonNull; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import java.util.ArrayList; import java.util.List; public class MAdapter extends PagerAdapter { List<ImageView> list; Context context; public MAdapter(Context context) { this.context = context; list = new ArrayList<>(); } public void setdata(List<ImageView> list){ this.list.clear(); this.list.addAll(list); notifyDataSetChanged(); } @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 = list.get(position % list.size()); container.addView(imageview); return imageview; } @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { container.removeView((View) object); } }布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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"> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="match_parent" android:layout_height="150dp"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignBottom="@+id/viewpager" android:layout_alignParentStart="true" android:gravity="center_horizontal" android:background="@color/colorAccent" android:orientation="vertical"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="text"/> <LinearLayout android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> </LinearLayout> </LinearLayout> </RelativeLayout>