package com.example.beijing.activity; import android.app.Activity; 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.util.Log; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import com.example.beijing.R; import java.lang.reflect.Array; import java.util.ArrayList; /** * 引导页面 */ public class GuideActivity extends Activity { public static final String TAG = "GuideActivity"; private ViewPager viewpage; private Button btn_start_main; private LinearLayout ll_point_group; private ImageView iv_red_point; private ArrayList<ImageView> imageViews; /** * 两点的间距 */ private int leftMax; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_guide); viewpage = findViewById(R.id.viewpage); btn_start_main = findViewById(R.id.btn_start_main); ll_point_group = findViewById(R.id.ll_point_group); iv_red_point = findViewById(R.id.iv_red_point); //准备数据,3张图片 int[] ids = new int[]{ R.drawable.guide_1, R.drawable.guide_2, R.drawable.guide_3 }; imageViews = new ArrayList<>(); for (int i = 0;i<ids.length;i++){ ImageView imageView = new ImageView(this); //设置背景 imageView.setBackgroundResource(ids[i]); //添加到集合中 imageViews.add(imageView); //创建灰色点,可用图片表示 ImageView point = new ImageView(this); point.setBackgroundResource(R.drawable.point_normal);//默认的点为灰色 //设置参数 /** * 单位是像素 */ LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(30,30); if (i != 0){ params.leftMargin = 10; } point.setLayoutParams(params); //添加到线性布局里面去 ll_point_group.addView(point); } //添加到集合中后设置ViewPage的适配器 viewpage.setAdapter(new MyPagerAdapter()); //添加到线性布局里面去然后 根据View的生命周期,当视图执行到onLayout或onDraw的时候,视图的高宽,边距都有了 iv_red_point.getViewTreeObserver().addOnGlobalLayoutListener(new MyOnGlobalLayoutListener()); } class MyOnGlobalLayoutListener implements ViewTreeObserver.OnGlobalLayoutListener{ @Override public void onGlobalLayout() { //执行不止一次 //此处只一次,所以过来移除 iv_red_point.getViewTreeObserver().removeGlobalOnLayoutListener(this);//removeOnGlobalLayoutListener也可以,但是对一些版本不支持 //间距 = 第1个点距离左边的距离 - 第0个点距离左边的距离 leftMax = ll_point_group.getChildAt(1).getLeft() - ll_point_group.getChildAt(0).getLeft(); //得到屏幕滑动的百分比 viewpage.addOnPageChangeListener(new MyOnPageChangeListener()); } } class MyOnPageChangeListener implements ViewPager.OnPageChangeListener { /** * 当页面滚动回调该方法 * @param i 当前滑动页面的位置 * @param v 页面滑动的百分比 就是整个屏幕滑动的百分比 * @param i1 滑动的像素 */ @Override public void onPageScrolled(int i, float v, int i1) { //两点间移动的距离 = 屏幕滑动的百分比 * 间距 // int lm = (int) (v * leftMax); Log.e(TAG,"position=="+i+",positionOffset=="+v); //两点间滑动距离对应的坐标 = 原来的起始位置 + 讲点间移动的距离 int lm = (int) (i * leftMax + (v * leftMax)); //params.leftMargin = 两点间滑动距离对应的坐标 RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) iv_red_point.getLayoutParams(); params.leftMargin = lm; iv_red_point.setLayoutParams(params); } /** * 当页面被选中的时候回调 * @param i 被选中页面的对应位置 */ @Override public void onPageSelected(int i) { } /** * 当状态viewpage滑动状态发生变化的时候,三个状态(拖,静止,放手) * @param i */ @Override public void onPageScrollStateChanged(int i) { } } class MyPagerAdapter extends PagerAdapter { /** * 返回数据的总个数 * @return */ @Override public int getCount() { return imageViews.size(); } /** * 作用,getView * @param container 容器ViewPage * @param position 要创建页面的位置 * @return 返回和创建当前页面有关系的值 */ @NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { ImageView imageView = imageViews.get(position); //添加到容器中 container.addView(imageView); return imageView; // return imageView;//if 返回position // return super.instantiateItem(container, position); } /** * 判断,是一个值true,反之false * @param view 当前创建的视图 * @param o 上面instantiateItem方法返回的结果值 * @return */ @Override public boolean isViewFromObject(@NonNull View view, @NonNull Object o) { //if 返回position /** * return view == imageViews.get(Integer.parseInt((String) o)); */ return view == o; } /** * viewpage默认创建第0,1,总共两个页面 * 销毁页面 * @param container ViewPager * @param position 要销毁页面的位置 * @param object 要销毁的页面 */ @Override public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) { //if返回的是页面,直接从容器中销毁即可 container.removeView((View) object); // super.destroyItem(container, position, object);object } } }
android 引导页面,viewpage添加引导图,开始体验按钮下的灰色点和红色点的的功能效果实现
最新推荐文章于 2022-10-03 23:55:35 发布