话不多说,直接看代码,代码中有详细的解释:
主类:
package com.example.day15;
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.View;
import android.view.ViewGroup;
import android.widget.ActionMenuView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ViewPager viewPager;
private LinearLayout layout;
private List<ImageView> imageViews = new ArrayList<>();
private int flag = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.viewPager);
layout = findViewById(R.id.layout);
//滑动视图
ImageView imageView1 = new ImageView(MainActivity.this);
imageView1.setImageResource(R.mipmap.qq);
ImageView imageView2 = new ImageView(MainActivity.this);
imageView2.setImageResource(R.mipmap.ss_02);
ImageView imageView3 = new ImageView(MainActivity.this);
imageView3.setImageResource(R.mipmap.ss_03);
ImageView imageView4 = new ImageView(MainActivity.this);
imageView4.setImageResource(R.mipmap.ss_04);
ImageView imageView5 = new ImageView(MainActivity.this);
imageView5.setImageResource(R.mipmap.ss_05);
imageViews.add(imageView1);
imageViews.add(imageView2);
imageViews.add(imageView3);
imageViews.add(imageView4);
imageViews.add(imageView5);
//动态创建小点点
for (int i = 0; i < imageViews.size(); i++) {
// 控件在代码中动态设置 点点的宽高(宽高要跟背景设置的圆角一样的大小就可以是圆形)
LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(10, 10);
//设置每个点点之间的距离
layoutParams.setMargins(10, 0, 10, 0);
ImageView imageView = new ImageView(MainActivity.this);//创建图片
imageView.setLayoutParams(layoutParams);//给图片把刚才设置的layoutParams设置上去
imageView.setBackgroundResource(R.drawable.selector);//设置背景为小点点
imageView.setEnabled(false);//先把所有都设置成为选中状态,设置为灰色的点点
layout.addView(imageView);//把小点点添加到layout视图中
}
//默认第一张 所有第一个点点为红色
layout.getChildAt(0).setEnabled(true);
//viewPager的监听事件
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
//这个方法每次滑动就走
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//滑动完成的时候才走(一般就用这个方法)
@Override
public void onPageSelected(int position) {
//获取layout下标为index的子视图(即选中状态下),给它设置它的背景为selected_point
// layout.getChildAt(0).setBackgroundResource(R.drawable.selected_point);
//状态可用 设置setEnabled为true 就会调用selector的第一个
// 这样就相当于设置可用的背景为红色点点
layout.getChildAt(position).setEnabled(true);
layout.getChildAt(flag).setEnabled(false);
flag = position;//存一下坐标(表示上一次点击时候的坐标)
}
//监听当前滑动的状态
@Override
public void onPageScrollStateChanged(int state) {
}
});
viewPager.setAdapter(new MyAdapter());
}
class MyAdapter extends PagerAdapter {
@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) {
container.addView(imageViews.get(position));
return imageViews.get(position);
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(imageViews.get(position));
}
}
}
主布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
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="400dp">
</android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/layout"
android:orientation="horizontal"
android:gravity="center"
android:layout_alignBottom="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="30dp">
</LinearLayout>
</RelativeLayout>
背景点点(默认情况下):
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="10dp"></corners>
<solid android:color="@color/hui"></solid>
</shape>
选中情况下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="10dp"></corners>
<solid android:color="@color/colorAccent"></solid>
</shape>
这个是看它是否是选中状态的情况下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:drawable="@drawable/selected_point"></item>
<item android:state_enabled="false" android:drawable="@drawable/point"></item>
</selector>
state_enabled是true的话,设置背景为selected_point
state_enabled是false的话,设置背景为point
效果:
emmmmm....应该是个程序猿