布局代码

<android.support.v4.view.ViewPager
android:id="@+id/viewpage"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<!--android:background="@drawable/btnselector"-->
<Button
android:id="@+id/btnty" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="100dp"
android:background="@drawable/btnselector"
android:paddingLeft="30dp"
android:paddingRight="30dp"
android:visibility="gone"
android:text="立即体验"
android:textColor="@drawable/textselector"
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="80dp"> <LinearLayout
android:id="@+id/linearpointgroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" />
<ImageView
android:id="@+id/ivredpoint"
android:background="@drawable/pointred"
android:layout_width="10dp"
android:layout_height="10dp" /> </RelativeLayout>

后台代码

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.support.annotation.NonNull;

import android.support.v4.view.PagerAdapter;

import android.support.v4.view.ViewPager;

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 java.util.ArrayList;

import java.util.List;

public class GuideActivity extends Activity {

List<ImageView> imageViews;
ViewPager vpage;
LinearLayout linearLayout;
ImageView imagepoint;
int leftmax = 0;
Button btnty;

int pointwidth=0;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_guide);

vpage = (ViewPager) findViewById(R.id.viewpage);

linearLayout = (LinearLayout) findViewById(R.id.linearpointgroup);

imagepoint = (ImageView) findViewById(R.id.ivredpoint);

//10为 默认点的 布局宽度

pointwidth=DensityUtil.diptopx(GuideActivity.this,10);

btnty = (Button) findViewById(R.id.btnty);

int[] intimage = new int[]{R.drawable.guide1, R.drawable.guide2, R.drawable.guide3};

imageViews = new ArrayList<>();

for (int ii = 0; ii < intimage.length; ii++) {

ImageView imageView = new ImageView(GuideActivity.this);

imageView.setBackgroundResource(intimage[ii]);

imageViews.add(imageView);

//创建点

        ImageView point = new ImageView(GuideActivity.this);
point.setBackgroundResource(R.drawable.point);
//此处单位是像素 需要做大小手机的适配 调用转换成像素的方法
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(pointwidth, pointwidth);
if (ii != 0) {
params.leftMargin = pointwidth;
}
point.setLayoutParams(params);
linearLayout.addView(point);
}
vpage.setAdapter(new pagetadapter()); Button btn = (Button) findViewById(R.id.btnty);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//设置缓存 进入过主界面
CacheParam.setkey(GuideActivity.this, "EnterMain", true);
Intent intent = new Intent(GuideActivity.this, LogInActivity.class);
startActivity(intent);
finish();
}
}); imagepoint.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//执行一次即可 所以 先移除
imagepoint.getViewTreeObserver().removeGlobalOnLayoutListener(this);
//间距 = 第一个点距离左边的距离-第0个点距离左边的距离
leftmax = linearLayout.getChildAt(1).getLeft() - linearLayout.getChildAt(0).getLeft();
}
});
vpage.setOnPageChangeListener(new MyPageChange());
} class MyPageChange implements ViewPager.OnPageChangeListener {
//当也没滑动的时候调用
/*
* 当前滑动页面的位置
* 页面滑动的百分比
* 滑动的像素*/
@Override
public void onPageScrolled(int position, float positionoffset, int positionoffsetpixels) {

//两点间滑动距离对应的坐标=原来的起始位置+两点间移动的距离

int leftmargin = (int) (position * leftmax + (positionoffset * leftmax));

        RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) imagepoint.getLayoutParams();
params.leftMargin = leftmargin;
imagepoint.setLayoutParams(params);
} /**
* 当页面选中的时候调用这个方法
* 被选中页面的位置
*/
@Override
public void onPageSelected(int position) {
//最后一个页面
if (position == imageViews.size() - 1) {
btnty.setVisibility(View.VISIBLE);
} else//其他页面
{
btnty.setVisibility(View.GONE);
}
} /**
* 当页面滑动状态变化的时候
*/
@Override
public void onPageScrollStateChanged(int i) { }
} class pagetadapter extends PagerAdapter { @Override
public int getCount() {
return imageViews.size();
} @Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
ImageView imageView = imageViews.get(position);
container.addView(imageView);
return imageView; } @Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view == o;
} @Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {

// super.destroyItem(container, position, object);

container.removeView((View) object);

}

}

}

import android.content.Context;

public class DensityUtil {

/*

* 根据手机的分辨率 从dip的单位 转为px 像素/

public static int diptopx(Context context,float dpvalue)

{

final float scale=context.getResources().getDisplayMetrics().density;

return (int)(dpvalue
scale+0.5f);

}

/*

* 根据手机的分辨率 从px的单位 转为dip

* */

public static int pxtodip(Context context,float pxvalue)

{

final float scale=context.getResources().getDisplayMetrics().density;

return (int)(pxvalue/scale+0.5f);

}

}

Android 引导页的代码的更多相关文章

  1. Android 引导页公共方法LeaderPager

    SimpAndroidFarme是近期脑子突然发热想做的android快速开发的框架,目标是模块化 常用的控件,方便新手学习和使用.也欢迎老鸟来一起充实项目:项目地址 引导页是我们开发app很常用的功 ...

  2. Android引导页设计

    大家在安装好一个应用后,第一次打开时往往会出现一个使用引导页,形式一般为三.四张图片,随着我们的滑动进行切换,在最后一页会有一个进入应用的按钮,我们通过点击这个按钮可以进入应用,其实这其中没有太多的复 ...

  3. Android引导页过多导致OOM内存泄漏

    摘要:前几天推广我们APP的时候,有些手机加载引导页的时候会闪退或崩溃,在Bugly显示是OOM异常.    然后Bugly上面显示的解决方案是: 该异常表示未能成功分配字节内存,通常是因为内存不足导 ...

  4. Xamarin.Android 引导页

    http://blog.csdn.net/qq1326702940/article/details/78665588 https://www.cnblogs.com/catcher1994/p/555 ...

  5. android引导页的实现 及跳转到主页面

    第一个activity package com.qualitypicture.activity; import java.util.ArrayList; import java.util.List; ...

  6. Android引导页

    源码地址:https://github.com/myloften/IntroSliderSample 博客地址:http://blog.csdn.net/loften_93663469/article ...

  7. Android 高级UI设计笔记22:Android 指示引导页(带圆点)

    1. 引导页: 我们在安装某个软件首次运行时,大部分都会有一个引导页的提示,介绍软件新功能的加入或者使用说明等,支持滑动且下面会有几个圆点,显示共有多少页和当前图片的位置,类似如下效果: 2. 引导页 ...

  8. 用Flutter开发的跨平台项目,完美运行在Android和IOS上,Material简洁风格,包括启动页、引导页、注册、登录、首页、体系、公众号、导航、项目,还有漂亮的妹子图库,运行极度流畅,结构清晰,代码规范,值得拥有

    Flutter学习资源汇总持续更新中...... Flutter官方网站 Flutter中文网 wendux的Flutter实战 Flutter官方exampleflutter_gallery 阿里巴 ...

  9. Android项目实战(三):实现第一次进入软件的引导页

    最近做的APP接近尾声了,就是些优化工作了, 我们都知道现在的APP都会有引导页,就是安装之后第一次打开才显示的引导页面(介绍这个软件的几张可以切换的图) 自己做了一下,结合之前学过的 慕课网_Vie ...

随机推荐

  1. 将项目导入myeclipse后 tortoise svn 右键项目不能更新和提交

    使用 tortoise svn客户端将svn服务器上的项目checkout之后正常,可以更新也可以提交:当将这个项目导入MyEclipse之后,不能更新和提交了只出现svn升级工作副本这一字样:网上搜 ...

  2. 借助mkcert签发本地证书

    mkcert 是由 Filippo Valsorda 使用go语言开源的一款零配置搭建本地证书服务的工具,它可以兼容Window, Linux, macOS等多种开发平台,省去了我们自签本地证书的繁琐 ...

  3. [PyTorch入门之60分钟入门闪击战]之训练分类器

    训练分类器 目前为止,你已经知道如何定义神经网络.计算损失和更新网络的权重.现在你可能在想,那数据呢? What about data? 通常,当你需要处理图像.文本.音频或者视频数据时,你可以使用标 ...

  4. STM32 一个初始化EXTI的例子

    23 May 2017 » Hardware 注:STM32F407VGT6 with STM32F4 DSP and standard peripherals library v1.8.0 外部中断 ...

  5. Hexo搭建个人博客(一)— 前期准备

    最近几个月自学python的过程中,搜索爬虫资料的时候关注了xlzd的博客,为我开启了一片新世界,之后慢慢收藏了各方高人的博客.搭建一个自己博客的萌芽也悄然种下,也许是命运使然,在逛知乎的时候偶然间看 ...

  6. 百度地图API:使用百度定位

    准备工作: 1.申请百度地图API 2.下载百度地图的SDK 3.将SDK包中的BaiduLBS_Android.jar文件放到,项目里的app/libs里面 4.在src/main目录下创建一个名为 ...

  7. 使用Python生成自己的特色二维码

    二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据 ...

  8. NSURLSession的前世今生

    系统网络框架架构图 前世-NSURLConnection NSURLConnection是苹果提供的原生网络访问类,已经有10多年的历史了,它从 iOS 2.0 开始,一直到iOS9被废弃.异步方法在 ...

  9. js中的0就是false,非0就是true。

    在处理js代码判断真假时经常会这么写. var vale = fun();//从某个地方获取的值. if(!value){ 进入这里表示value为false或不存在 }但fun()可能得到的是数字0 ...

  10. webpack从0到1超详细超基础学习教程

    概念 自己是一个一听到webpack就头大,看着一堆不知道那是什么玩意的东西总觉得自己做好前端就行了,但是在使用vue-cli的时候总觉得要改其中的一些东西进行项目初始化的时候能够更好使用!所以想要根 ...