博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 项目学习随笔二(引导页 )
阅读量:6981 次
发布时间:2019-06-27

本文共 6629 字,大约阅读时间需要 22 分钟。

1、引导页

1、定义灰色、红色圆点的shape XML文件

2、定义布局文件,利用相对布局文件定位,利用线性布局加载灰色圆点,imageview加载红色圆点

3、android.support.v4.view.ViewPager实现图片切换

4、利用数组存入背景图片

private int[] mImageIds = new int[] { R.drawable.guide_1,

R.drawable.guide_2, R.drawable.guide_3 };

5、private ArrayList<ImageView> mImageViewList存入要显示的VIEW

6、利用线性布局参数设置圆点距离

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(

LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
if (i > 0) {
params.leftMargin = 8;// 从第二个点开始设置边距
}

pointView.setLayoutParams(params);

7、页面绘制结束之后, 计算两个圆点的间距

ivRedPoint.getViewTreeObserver().addOnGlobalLayoutListener(

new OnGlobalLayoutListener() {

8、红色圆点滚动

mViewPager.setOnPageChangeListener(new OnPageChangeListener() 

XML
import java.util.ArrayList;import com.itheima.zhsh66.utils.PrefUtils;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.view.ViewTreeObserver.OnGlobalLayoutListener;import android.view.Window;import android.widget.Button;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RelativeLayout;/** * 新手引导 *  * @author Kevin * @date 2015-8-10 */public class GuideActivity extends Activity implements OnClickListener {    private ViewPager mViewPager;    private LinearLayout llContainer;    private ImageView ivRedPoint;// 小红点    private Button btnStart;    private int[] mImageIds = new int[] { R.drawable.guide_1,            R.drawable.guide_2, R.drawable.guide_3 };    private ArrayList
mImageViewList; private int mPointWidth;// 两个圆点的宽度 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 去掉标题, 必须在setContentView之前执行 requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_guide); mViewPager = (ViewPager) findViewById(R.id.vp_pager); llContainer = (LinearLayout) findViewById(R.id.ll_container); ivRedPoint = (ImageView) findViewById(R.id.iv_red_point); btnStart = (Button) findViewById(R.id.btn_start); btnStart.setOnClickListener(this); // 初始化ImageView mImageViewList = new ArrayList
(); for (int i = 0; i < mImageIds.length; i++) { ImageView view = new ImageView(this); view.setBackgroundResource(mImageIds[i]); mImageViewList.add(view); // 初始化圆点 ImageView pointView = new ImageView(this); pointView.setImageResource(R.drawable.shape_circle_default); // 初始化圆点布局参数 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); if (i > 0) { params.leftMargin = 8;// 从第二个点开始设置边距 } pointView.setLayoutParams(params); llContainer.addView(pointView); } mViewPager.setAdapter(new MyAdapter()); // 页面绘制结束之后, 计算两个圆点的间距 // 视图树 ivRedPoint.getViewTreeObserver().addOnGlobalLayoutListener( new OnGlobalLayoutListener() { // layout方法执行结束(位置确定) @Override public void onGlobalLayout() { // 移除监听 ivRedPoint.getViewTreeObserver() .removeGlobalOnLayoutListener(this); // 获取两个圆点的间距 mPointWidth = llContainer.getChildAt(1).getLeft() - llContainer.getChildAt(0).getLeft(); System.out.println("width:" + mPointWidth); } }); mViewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int position) { if (position == mImageIds.length - 1) {
// 最后页面显示开始体验 btnStart.setVisibility(View.VISIBLE); } else { btnStart.setVisibility(View.GONE); } } // 页面滑动过程的回调 @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { System.out.println("当前位置:" + position + ";偏移百分比:" + positionOffset); // 计算当前小红点的左边距 int leftMargin = (int) (mPointWidth * positionOffset + position * mPointWidth); // 修改小红点的左边距 RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) ivRedPoint .getLayoutParams(); params.leftMargin = leftMargin; ivRedPoint.setLayoutParams(params); } @Override public void onPageScrollStateChanged(int state) { } }); } class MyAdapter extends PagerAdapter { @Override public int getCount() { return mImageIds.length; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { // ImageView view = new ImageView(getApplicationContext()); // view.setBackgroundResource(mImageIds[position]); ImageView view = mImageViewList.get(position); container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_start: // 开始体验 // 记录新手引导已经被展示的状态,下次启动不再展示 PrefUtils.putBoolean("is_guide_show", true, this); startActivity(new Intent(this, MainActivity.class)); finish(); break; default: break; } }}
View Code
/zhsh/res/drawable/shape_circle_default.xml
/drawable/shape_circle_selected.xml

 

转载于:https://www.cnblogs.com/ecollab/p/6027258.html

你可能感兴趣的文章
遮罩效果的实现
查看>>
Android之NDK开发的简单实例
查看>>
日志分析工具splunt
查看>>
元素宽高的获取
查看>>
SQLSERVER存储过程基本语法使用
查看>>
sql server时间转换
查看>>
CDH大数据集群安全风险汇总
查看>>
数据结构实验之链表一:顺序建立链表
查看>>
docker Rails Permission denied @ dir_s_mkdir
查看>>
【二分答案】【最短路】bzoj1614 [Usaco2007 Jan]Telephone Lines架设电话线
查看>>
【贪心】Google Code Jam Round 1A 2018 Waffle Choppers
查看>>
【转载】【贪心】各种覆盖问题
查看>>
HDU 6051 - If the starlight never fade | 2017 Multi-University Training Contest 2
查看>>
insert into与insert ignore以及replace into的区别
查看>>
【网络流24题】最小路径覆盖问题
查看>>
java分享第五天(数组)
查看>>
数组与纠结的排序篇
查看>>
Mysql无法选取非聚合列
查看>>
ASP.NETCore学习记录(一)
查看>>
Linux命令-安装zip和unzip命令
查看>>