首先我们需要准备圆点图片
我这里就贴红色圆点的代码
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<size android:height="10dp" android:width="10dp"/>
<solid android:color="@android:color/holo_red_light"/>
</shape>
布局
<?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="match_parent" />
<Button
android:id="@+id/btn_start_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="80dp"
android:background="@drawable/btn_start_main_selector"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:text="开始体验"
android:visibility="gone"
android:textColor="@drawable/btn_start_main_textcolor_selector"
android:textSize="20sp" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="40dp">
<LinearLayout
android:id="@+id/ll_point_group"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" />
<ImageView
android:id="@+id/iv_red_point"
android:background="@drawable/point_red"
android:layout_width="10dp"
android:layout_height="10dp" />
</RelativeLayout>
</RelativeLayout>
代码较简单,我在代码中添加了注释,看代码即可
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private ViewPager viewpager;
private Button btn_start_main;
private LinearLayout ll_point_group;
private ImageView iv_red_point;
private ArrayList<ImageView> imageViews;
/**
* 两点的间距
*/
private int leftmax;
//圆点的大小
private int pointwidth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_guide);
initView();
//准备数据
int[] data = new int[]{
R.drawable.guide1,
R.drawable.guide2,
R.drawable.guide3
};
pointwidth = dip2px(10);
imageViews = new ArrayList<>();
for (int i = 0; i < data.length; i++) {
ImageView imageView = new ImageView(this);
//设置背景
imageView.setBackgroundResource(data[i]);
//添加到集合中
imageViews.add(imageView);
//创建点
ImageView point = new ImageView(this);
point.setBackgroundResource(R.drawable.point_normal);
//每个点设置参数
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(pointwidth, pointwidth);
if (i != 0) {
//除了0之外所有的点向左移动10个像素点
params.leftMargin = pointwidth;
}
point.setLayoutParams(params);
//添加到点的线性布局中
ll_point_group.addView(point);
}
//设置ViewPager的适配器
viewpager.setAdapter(new MyPagerAdapter());
iv_red_point.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
iv_red_point.getViewTreeObserver().removeOnGlobalLayoutListener(this);
leftmax = ll_point_group.getChildAt(1).getLeft() - ll_point_group.getChildAt(0).getLeft();
}
});
//得到屏幕滑动的百分比
viewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
/**
* 当页面回调了会回调这个方法
* @param position 当前滑动页面的位置
* @param positionOffset 页面滑动的百分比
* @param positionOffsetPixels 滑动的像数
*/
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//两点间滑动距离对应的坐标 = 原来的起始位置 + 两点间移动的距离
int leftmargin = (int)(position * leftmax + (positionOffset * leftmax));
//params.leftMargin = 两点间滑动距离对应的坐标
RelativeLayout.LayoutParams params= (RelativeLayout.LayoutParams) iv_red_point.getLayoutParams();
params.leftMargin=leftmargin;
iv_red_point.setLayoutParams(params);
}
/**
* 当页面被选中的时候,回调这个方法
* @param position 被选中页面的对应的位置
*/
@Override
public void onPageSelected(int position) {
if(position==imageViews.size()-1){
//最后一个页面
btn_start_main.setVisibility(View.VISIBLE);
}else{
//其他页面
btn_start_main.setVisibility(View.GONE);
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
private int dip2px(float dpVale) {
final float scale = getResources().getDisplayMetrics().density;
return (int) (dpVale * scale + 0.5f);
}
private void initView() {
viewpager = (ViewPager) findViewById(R.id.viewpager);
btn_start_main = (Button) findViewById(R.id.btn_start_main);
ll_point_group = (LinearLayout) findViewById(R.id.ll_point_group);
iv_red_point = (ImageView) findViewById(R.id.iv_red_point);
}
class MyPagerAdapter extends PagerAdapter {
/**
* 返回数据的总个数
*/
@Override
public int getCount() {
return imageViews.size();
}
/**
* 作用,getView
* @param container ViewPager
* @param position 要创业页面的位置
* @return 返回和创建当前页面右关系的值
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imageView = imageViews.get(position);
//添加到容器中
container.addView(imageView);
return imageView;
}
/**
* @param view 当前创建的视图
* @param object 上面instantiateItem返回的结果值
*/
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
/**
* 销毁页面
* @param container ViewPager
* @param position 要销毁页面的位置
* @param object 要销毁的页面
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
}
网友评论