android引导页中的小圆点随手势滑动demo

来源:互联网 发布:机锋论坛软件区 编辑:程序博客网 时间:2024/06/02 04:14

直接上代码,首先是布局文件:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <android.support.v4.view.ViewPager        android:id="@+id/vp_guide"        android:layout_width="match_parent"        android:layout_height="match_parent" />    <Button        android:id="@+id/btn_start"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_centerHorizontal="true"        android:layout_marginBottom="60dp"        android:padding="5dp"        android:text="立即进入"        android:visibility="invisible"/>    <RelativeLayout        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_centerHorizontal="true"        android:layout_marginBottom="20dp" >        <LinearLayout            android:id="@+id/ll_point_group"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:orientation="horizontal" >        </LinearLayout>        <View            android:id="@+id/view_blue_point"            android:layout_width="10dp"            android:layout_height="10dp"            android:background="@mipmap/activity_point_h" />    </RelativeLayout></RelativeLayout>

操作代码:

package com.company.augus.guidepointdemo;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.ViewGroup;import android.view.ViewTreeObserver;import android.view.Window;import android.widget.Button;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;import android.widget.Toast;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {    private static final int[] mImageIds = new int[] { R.mipmap.activity_one,R.mipmap.activity_two, R.mipmap.activity_three};    private ViewPager vpGuide;    private ArrayList<ImageView> mImageViewList;    private LinearLayout llPointGroup;// 引导圆点的父控件    private int mPointWidth;// 圆点间的距离    private View viewBluePoint;// 蓝点    private Button btnStart;// 进入    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_main);        vpGuide = (ViewPager) findViewById(R.id.vp_guide);        llPointGroup = (LinearLayout) findViewById(R.id.ll_point_group);        viewBluePoint = findViewById(R.id.view_blue_point);        btnStart = (Button) findViewById(R.id.btn_start);        btnStart.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                Toast.makeText(MainActivity.this,"enter",Toast.LENGTH_SHORT).show();            }        });        initViews();        vpGuide.setAdapter(new GuideAdapter());        vpGuide.setOnPageChangeListener(new GuidePageListener());    }    /**     * 初始化界面     */    private void initViews() {        mImageViewList = new ArrayList<ImageView>();        // 初始化引导页的3个页面        for (int i = 0; i < mImageIds.length; i++) {            ImageView image = new ImageView(this);            image.setBackgroundResource(mImageIds[i]);// 设置引导页背景            mImageViewList.add(image);        }        // 初始化引导页的灰色圆点        for (int i = 0; i < mImageIds.length; i++) {            View point = new View(this);            point.setBackgroundResource(R.mipmap.activity_point_n);// 设置引导页默认圆点            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(18, 18);            if (i > 0) {                params.leftMargin = 10;// 设置圆点间隔            }            point.setLayoutParams(params);// 设置圆点的大小            llPointGroup.addView(point);// 将圆点添加给线性布局        }        // 获取视图树, 对layout结束事件进行监听        llPointGroup.getViewTreeObserver().addOnGlobalLayoutListener(                new ViewTreeObserver.OnGlobalLayoutListener() {                    // 当layout执行结束后回调此方法                    @Override                    public void onGlobalLayout() {                        llPointGroup.getViewTreeObserver().removeGlobalOnLayoutListener(this);                        mPointWidth = llPointGroup.getChildAt(1).getLeft()-llPointGroup.getChildAt(0).getLeft();                        System.out.println("圆点距离:" + mPointWidth);                    }                });    }    /**     * ViewPager数据适配器     *     */    class GuideAdapter extends PagerAdapter {        @Override        public int getCount() {            return mImageIds.length;        }        @Override        public boolean isViewFromObject(View arg0, Object arg1) {            return arg0 == arg1;        }        @Override        public Object instantiateItem(ViewGroup container, int position) {            container.addView(mImageViewList.get(position));            return mImageViewList.get(position);        }        @Override        public void destroyItem(ViewGroup container, int position, Object object) {            container.removeView((View) object);        }    }    /**     * viewpager的滑动监听     */    class GuidePageListener implements ViewPager.OnPageChangeListener {        // 滑动事件        @Override        public void onPageScrolled(int position, float positionOffset,                                   int positionOffsetPixels) {            // System.out.println("当前位置:" + position + ";百分比:" + positionOffset            // + ";移动距离:" + positionOffsetPixels);            int len = (int) (mPointWidth * positionOffset) + position * mPointWidth;            RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) viewBluePoint.getLayoutParams();// 获取当前蓝点的布局参数            params.leftMargin = len;// 设置左边距            viewBluePoint.setLayoutParams(params);// 重新给蓝点设置布局参数        }        // 某个页面被选中        @Override        public void onPageSelected(int position) {            if (position == mImageIds.length - 1) {// 最后一个页面                btnStart.setVisibility(View.VISIBLE);// 显示立即进入的按钮            } else {                btnStart.setVisibility(View.INVISIBLE);            }        }        // 滑动状态发生变化        @Override        public void onPageScrollStateChanged(int state) {        }    }}

1 0
原创粉丝点击