android 引导页加动画,Android用户引导页实现,圆点实现动画效果

这篇博客介绍了Tracy应用中的引导活动类(GuideActivity),包括ViewPager的使用、圆点导航、视图布局初始化、数据加载和监听器设置。用户可以从设置或登录页面进入,完成引导后可直接体验应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

packagecom.study.tracy.activity;importandroid.content.Intent;importandroid.support.v4.view.ViewPager;importandroid.support.v4.view.ViewPager.OnPageChangeListener;importandroid.util.Log;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.view.ViewTreeObserver.OnGlobalLayoutListener;importandroid.widget.Button;importandroid.widget.ImageView;importandroid.widget.LinearLayout;importandroid.widget.LinearLayout.LayoutParams;importandroid.widget.RelativeLayout;importcom.study.tracy.R;importcom.study.tracy.adapter.GuideAdapter;importcom.study.tracy.base.BaseActivity;importcom.study.tracy.constants.FlagConstants;importcom.study.tracy.utils.DensityUtils;importcom.study.tracy.utils.SharedPrefUtils;importjava.util.ArrayList;public class GuideActivity extendsBaseActivity {privateViewPager vpGuide;private LinearLayout llPointGroup; //引导圆点的父控件

private View guidePoint; //选中的圆点

private Button startBtn; //开始体验按钮

private Button skipBtn; //跳过按钮//引导页背景图片的id数组

private static final int[] mImageIds = new int[] {R.mipmap.user_guide01,

R.mipmap.user_guide02, R.mipmap.user_guide03 , R.mipmap.user_guide04, R.mipmap.user_guide05};private int mPointWidth = 0;//圆点间的距离

private ArrayListmImageViewList;privateString from;

@Overridepublic voidinitViews() {this.setContentView(R.layout.guide_layout);//获取从哪里进来的入口

from = getIntent().getStringExtra("from");

vpGuide=(ViewPager) findViewById(R.id.vp_guide);

llPointGroup=(LinearLayout) findViewById(R.id.ll_point_group);

guidePoint=findViewById(R.id.view_guide_point);

startBtn=(Button) findViewById(R.id.btn_start);

skipBtn=(Button) findViewById(R.id.btn_skip);

}

@Overridepublic voidinitDatas() {

BaseActivity.isOpenDistanceBack= false;

mImageViewList= new ArrayList();//初始化引导页的三个页面

ImageView imageView = null;for (int i = 0; i < mImageIds.length; i++) {

imageView= new ImageView(this);

imageView.setBackgroundResource(mImageIds[i]);//设置引导页的背景图片

mImageViewList.add(imageView);

}for (int i = 0; i < mImageIds.length; i++) {

Log.d("Point View", "第" + i + "个圆点");

View point= new View(this);//设置引导页默认圆点背景

point.setBackgroundResource(R.drawable.shape_point_gray);

LayoutParams params= new LayoutParams(DensityUtils.dp2px(this, 12), DensityUtils.dp2px(this, 12));if(i > 0){

params.leftMargin= DensityUtils.dp2px(this, 10); //从第二个圆点开始设置左间距

}

point.setLayoutParams(params);

llPointGroup.addView(point);//将圆点添加到线性布局中

}//获取视图树, 对layout绘制结束事件进行监听

llPointGroup.getViewTreeObserver().addOnGlobalLayoutListener(newOnGlobalLayoutListener() {public voidonGlobalLayout() {

Log.d("llPointLayout", "llPointLayout绘制结束!");

llPointGroup.getViewTreeObserver().removeGlobalOnLayoutListener(this);if(mPointWidth == 0){

mPointWidth= llPointGroup.getChildAt(1).getLeft()- llPointGroup.getChildAt(0).getLeft();

Log.d("圆点需要移动的距离:", mPointWidth + "");

}

}

});

}

@Overridepublic voidinitListeners() {

vpGuide.setAdapter(newGuideAdapter(mImageViewList));

vpGuide.setOnPageChangeListener(newGuidePageListener());

startBtn.setOnClickListener(newOnClickListener() {public voidonClick(View v) {

skipToActivity();

}

});

skipBtn.setOnClickListener(newOnClickListener() {public voidonClick(View v) {

skipToActivity();

}

});

}private voidskipToActivity() {//更新引导页是否显示为true,下次进入就不显示

SharedPrefUtils.getInstance().setBoolean(FlagConstants.USER_GUIDE, true);//跳转到登录的Activity中

Intent intent = null;//if("setting".equals(from)){//intent = new Intent(GuideActivity.this, SettingActivity.class);//}else {

intent = new Intent(GuideActivity.this, LoginActivity.class);//}

startActivity(intent);

finish();

}class GuidePageListener implementsOnPageChangeListener {//滑动状态发生变化

public void onPageScrollStateChanged(intarg0) {}/*** position : 当前的位置

* positionOffset : 位置移动的百分比

* positionOffsetPixels: 位置移动的px像素点*/

public void onPageScrolled(int position, float positionOffset, intpositionOffsetPixels) {int len = (int) (mPointWidth * positionOffset + position *mPointWidth);

RelativeLayout.LayoutParams params=(RelativeLayout.LayoutParams) guidePoint.getLayoutParams();

params.leftMargin= len; //设置选中圆点在父控件中的左间距

guidePoint.setLayoutParams(params);//重新给选中圆点设置布局参数

}public void onPageSelected(intposition) {if(position == mImageIds.length - 1){//最后一个页面,设置开始体验按钮显示

startBtn.setVisibility(View.VISIBLE);

}else{

startBtn.setVisibility(View.INVISIBLE);

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值