//布局
<android.support.v4.view.ViewPager
android:id="@+id/ViewPager_vp"
android:layout_width="match_parent"
android:layout_height="200dp"/>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_alignBottom="@+id/ViewPager_vp"
android:gravity="center_horizontal"
android:padding="8dp"
android:orientation="vertical"
android:background="#88000000">
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/ViewPager_tv"
android:text="我是杨政"
android:textColor="@android:color/white"/>
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/ll_dot"
android:orientation="horizontal">
</LinearLayout>
</LinearLayout>
//main方法 public class MainActivity extends AppCompatActivity {
private LinearLayout ll_dot;
private TextView ViewPager_tv;
private ViewPager ViewPager_vp;
private List<ImageView> ImageViews = new ArrayList();
//图片int数组资源
private int[] imageResIds = {
R.drawable.a,
R.drawable.b,
R.drawable.c,
R.drawable.d,
R.drawable.e,
};
//图片字符串数组String[]资源.
private String[] descs = {
"巩俐不低俗,我就不能低俗",
"扑树又回来啦!再唱经典老歌引万人大合唱",
"揭秘北京电影如何升级",
"乐视网TV版大派送",
"热血屌丝的反杀",
};
private MyPageAdapter adapter;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0:
int currentItem = ViewPager_vp.getCurrentItem();
if (currentItem == imageResIds.length-1){
currentItem = 0;
}else {
currentItem++;
}
ViewPager_vp.setCurrentItem(currentItem);
sendEmptyMessageDelayed(0,2000);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
initView();
}
private void initView() {
//找到可以设置点的容器LinearLayout的对象,进行点的添加
ll_dot = findViewById(R.id.ll_dot);
ViewPager_tv = findViewById(R.id.ViewPager_tv);
ViewPager_vp = findViewById(R.id.ViewPager_vp);
//更加图片int数组资源的数量,动态的创建ImageView控件.就是有几张图片,创建几个ImageView,for循环
for (int x = 0; x < imageResIds.length; x++) {
//创建ImageView对象
ImageView imageView = new ImageView(this);
//通过该对象添加图片资源..setBackgroundResource方法.
imageView.setBackgroundResource(imageResIds[x]);
//把控件添加到集合ImageViews中去,以方便在VIewPager的适配器里instantiateItem方法获取.
ImageViews.add(imageView);
//进行点的添加,其个数和图片的个数一致,因此放到该循环中,
createDot(x);
}
//创建适配器
adapter = new MyPageAdapter(ImageViews,MainActivity.this);
//设置适配器
ViewPager_vp.setAdapter(adapter);
handler.sendEmptyMessageDelayed(0,2000);
ViewPager_vp.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
handler.removeMessages(0);
break;
case MotionEvent.ACTION_MOVE:
handler.removeMessages(0);
break;
case MotionEvent.ACTION_UP:
handler.sendEmptyMessageDelayed(0,2000);
break;
}
return false;
}
});
//设置ViewPager的滑动监听器,addOnPageChangeListener,set的方法因为名字的原因被淘汰了
ViewPager_vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//同过getCurrentItem方法拿到当前用户所交互ViewPager的item位置.
int currentItem = ViewPager_vp.getCurrentItem();
//通过得到的这个item,给text和点进行选中的设置.
changeTextandDot(currentItem);
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private void changeTextandDot(int position) {
//根据ViewPager的item的变化,设置对应的文本.setText(descs[position]);
ViewPager_tv.setText(descs[position]);
//对点进行判断是否是当前页的点,用for循环,拿到所有点的位置,然后和position对比
for(int x=0; x< imageResIds.length; x++){
//.getChildAt(x);拿到容器的子控件.得到VIew对象
View childAt = ll_dot.getChildAt(x);
//为View设置背景图片,,使用三元运算符.
childAt.setBackgroundResource(x==position?R.drawable.dot_focus:R.drawable.dot_normal);
}
}
private void createDot(int x) {
//创建一个View对象;
View view= new View(this);
//为这个View对象设置背景setBackgroundResource
view.setBackgroundResource(R.drawable.dot_normal);
//为View对象设置宽高参数,使用参数对象LayoutParams(int,int),给哪个容器,就用哪个容器创建
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(8,8);
//使用参数对象LayoutParams.leftMargin=int,相当于布局里的padding.
layoutParams.leftMargin=8;
//把准备好的layoutParams参数对象,设置给View对象.setLayoutParams
view.setLayoutParams(layoutParams);
//最后容器对象.addView(VIwe);
ll_dot.addView(view);
}
//适配
public class MyPageAdapter extends PagerAdapter {
private List imageViews;
private Context context;
public MyPageAdapter(List<ImageView> imageViews, Context context) {
this.imageViews = imageViews;
this.context = context;
}
@Override
public int getCount() {
return imageViews.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view == object;
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView imageView = imageViews.get(position);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView((View) object);
}
}