如图设置的一种引导页的开启这个引用时先将图片进行一个动画当动画结束时进入到了引导页面

下面的小图片 当点击的时候ViewPager消失 再点击时ViewPager在显示出来

先看开启界面  上面的动画还是值得借鉴的

package com.demo.activity;

import com.demo.pullrefresh.R;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationSet;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.widget.RelativeLayout; /**
* 闪屏页
*
* @author Administrator
*
*/
public class SplashActivity extends Activity {
private RelativeLayout rl_root; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.splashactivity);
rl_root = (RelativeLayout) findViewById(R.id.rl_root);
startAnim();
} /**
* 开启动画
*/
private void startAnim() {
// TODO Auto-generated method stub
// 动画集合
AnimationSet set = new AnimationSet(false); // 旋转动画
RotateAnimation rotate = new RotateAnimation(0, 360,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
rotate.setDuration(1000);// 设置动画的时间
rotate.setFillAfter(true); // 设置动画状态 // 缩放的动画
ScaleAnimation scale = new ScaleAnimation(0, 1, 0, 1,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
0.5f);
scale.setDuration(1000);
scale.setFillAfter(true); // 渐变的动画
AlphaAnimation alpha = new AlphaAnimation(0, 1);
alpha.setDuration(2000);
alpha.setFillAfter(true); set.addAnimation(rotate);
set.addAnimation(scale);
set.addAnimation(alpha);
// 设置动画监听
set.setAnimationListener(new AnimationListener() { @Override
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub } @Override
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub } // 动画执行完
@Override
public void onAnimationEnd(Animation arg0) {
// TODO Auto-generated method stub
startActivity(new Intent(SplashActivity.this,
GuideActivity.class));
finish();
}
});
rl_root.startAnimation(set);
} /**
* 调转到下个界面
*/
private void jumpNextPage() {
SharedPreferences sPreferences = getSharedPreferences("infos",
MODE_PRIVATE);
boolean isuserGuid = sPreferences.getBoolean("key", false);
if (!isuserGuid) {
// 进入引导页
startActivity(new Intent(SplashActivity.this, GuideActivity.class));
} else {
startActivity(new Intent(SplashActivity.this, MainActivity.class));
}
finish();
}
}

在看引导界面

package com.demo.activity;

import java.util.ArrayList;

import com.demo.pullrefresh.R;

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.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; public class GuideActivity extends Activity {
/**
* 图片的数据
*/
private static final int[] mImageIds = new int[] { R.drawable.guide_1,
R.drawable.guide_2, R.drawable.guide_3 };
private ArrayList<ImageView> mImageViewList;
/**
* ViewPager的实现
*/
private ViewPager vPager;
private LinearLayout llPointGroup;// 引导原点的父控件
private View viewRedPoint;// 小红点
private int mPointWidth;// 圆点间的距离 private Button btnStart;// 进入其他的界面 /**
* 设置一个按钮当点击的时候将ViewPager所在的Layout隐藏再点击的时候将它显示出来
*/
private ImageView igv_image;
private RelativeLayout rl_one;
private boolean visibility_flag; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_guide);
vPager = (ViewPager) findViewById(R.id.vp_guide);
llPointGroup = (LinearLayout) findViewById(R.id.ll_point_group);
viewRedPoint = findViewById(R.id.view_red_position);
btnStart = (Button) findViewById(R.id.btn_start);
igv_image = (ImageView) findViewById(R.id.igv_image);
rl_one = (RelativeLayout) findViewById(R.id.rl_one);
initViews();
vPager.setAdapter(new GuideAdapter());
vPager.setOnPageChangeListener(new GuidePageListener());
igv_image.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (visibility_flag) {
rl_one.setVisibility(View.VISIBLE);
visibility_flag = false;
} else {
rl_one.setVisibility(View.INVISIBLE);
visibility_flag = true;
}
}
});
btnStart.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
startActivity(new Intent(GuideActivity.this, MainProducte.class));
finish();
}
});
} /**
* 初始化界面
*/
private void initViews() {
// TODO Auto-generated method stub
mImageViewList = new ArrayList<ImageView>();
// 初始化引导的3个界面
for (int i = 0; i < mImageIds.length; i++) {
ImageView imageView = new ImageView(this);
imageView.setBackgroundResource(mImageIds[i]);
mImageViewList.add(imageView);
}
// 初始化引导页的小圆点
for (int i = 0; i < mImageIds.length; i++) {
View pointView = new View(this);
pointView.setBackgroundResource(R.drawable.shape_point_gray);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
10, 10);
if (i > 0) {
params.leftMargin = 10;// 设置圆点间隔
}
pointView.setLayoutParams(params);// 设置圆点的大小
llPointGroup.addView(pointView);
}
// 获取视图树,对layout结束事件进行监听
llPointGroup.getViewTreeObserver().addOnGlobalLayoutListener(
new OnGlobalLayoutListener() {
// 当layout执行结束后回调此方法
@Override
public void onGlobalLayout() {
// TODO Auto-generated method stub
llPointGroup.getViewTreeObserver()
.removeGlobalOnLayoutListener(this);
mPointWidth = llPointGroup.getChildAt(1).getLeft()
- llPointGroup.getChildAt(0).getLeft();
System.out.println("圆点距离:————" + mPointWidth);
}
});
} /**
* ViewPager数据的适配器
*
* @author Administrator
*
*/
class GuideAdapter extends PagerAdapter { @Override
public int getCount() {
// TODO Auto-generated method stub
return mImageIds.length;
} // 判断是否由对象生成界面
@Override
public boolean isViewFromObject(View view, Object object) {
// TODO Auto-generated method stub
return view == object;// 它用于判断你当前要显示的页面
} // 初始化position位置的界面 类似于baseAdapter的 getView方法
@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
container.addView(mImageViewList.get(position));
return mImageViewList.get(position);
} // 摧毁position位置的界面
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
// super.destroyItem(container, position, object);
container.removeView((View) object);
}
} /**
* ViewPager 的滑动监听
*
* @author Administrator
*
*/
class GuidePageListener implements OnPageChangeListener {
// 滑动事件
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
// TODO Auto-generated method stub
System.out.println("当前位置:" + position + ";百分比:" + positionOffset
+ "; 移动距离:" + positionOffsetPixels);
int len = (int) (mPointWidth * positionOffset + position
* mPointWidth);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) viewRedPoint
.getLayoutParams();// 获取当前红色的布局参数
params.leftMargin = len;// 设置左边距
viewRedPoint.setLayoutParams(params);// 重新给小红点设置布局参数
} // 某个页面被选中
@Override
public void onPageSelected(int position) {
// TODO Auto-generated method stub
if (position == mImageIds.length - 1) {// 最后一个页面
btnStart.setVisibility(View.VISIBLE);
} else {
btnStart.setVisibility(View.INVISIBLE);
}
} // 滑动状态发生变化
@Override
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub } }
}
<?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" > <RelativeLayout
android:id="@+id/rl_one"
android:layout_width="match_parent"
android:layout_height="400dp" > <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="50dp"
android:background="@drawable/btn_guide_selector"
android:padding="5dp"
android:visibility="invisible"
android:text="下个"
android:textColor="@drawable/btn_guide_text_selector" /> <RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="15dp" > <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_red_position"
android:layout_width="8dp"
android:layout_height="8dp"
android:background="@drawable/shape_point_red" /> </RelativeLayout>
</RelativeLayout>
<RelativeLayout
android:layout_below="@id/rl_one"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#eee">
<ImageView
android:id="@+id/igv_image"
android:layout_width="40dp"
android:layout_height="40dp"
android:src="@drawable/ic_launcher"
android:layout_centerInParent="true"
/>
</RelativeLayout>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:color="@android:color/black"></item>
<item android:color="@android:color/white"/>
</selector>

ViewPager应用引导界面的更多相关文章

  1. 转-ViewPager组件(仿微信引导界面)

    http://www.cnblogs.com/lichenwei/p/3970053.html 这2天事情比较多,都没时间更新博客,趁周末,继续继续~ 今天来讲个比较新潮的组件——ViewPager ...

  2. 【笔记】WPF实现ViewPager引导界面效果及问题汇总

    最近在开发项目的首次使用引导界面时,遇到了问题,引导界面类似于安卓手机ViewPager那样的效果,希望通过左右滑动手指来实现切换不同页面,其间伴随动画. 实现思路: 1.界面布局:新建一个UserC ...

  3. 安卓开发笔记——ViewPager组件(仿微信引导界面)

    这2天事情比较多,都没时间更新博客,趁周末,继续继续~ 今天来讲个比较新潮的组件——ViewPager 什么是ViewPager? ViewPager是安卓3.0之后提供的新特性,继承自ViewGro ...

  4. 【Android UI设计与开发】第02期:引导界面(二)使用ViewPager实现欢迎引导页面

    本系列文章都会以一个程序的实例开发为主线来进行讲解,以求达到一个循序渐进的学习效果,这样更能加深大家对于程序为什么要这样写的用意,理论加上实际的应用才能达到事半功倍的效果,不是吗? 最下方有源码的下载 ...

  5. 【Android UI设计与开发】第01期:引导界面(一)ViewPager介绍和使用详解

    做Android开发加起来差不多也有一年多的时间了,总是想写点自己在开发中的心得体会与大家一起交流分享.共同进步,刚开始写也不知该如何下手,仔细想了一下,既然是刚开始写,那就从一个软件给人最直观的感受 ...

  6. 用ViewPager实现一个程序引导界面

    下面使用ViewPager来实现一个程序引导的demo: 一般来说,引导界面是出现第一次运行时出现的,之后不会再出现.所以需要记录是否是第一次使用程序,办法有很多,最容易想到的就是使用SharedPr ...

  7. Android控件-ViewPager(仿微信引导界面)

    什么是ViewPager? ViewPager是安卓3.0之后提供的新特性,继承自ViewGroup,专门用以实现左右滑动切换View的效果. 如果想向下兼容就必须要android-support-v ...

  8. App 引导界面

    App 引导界面 1.前言 最近在学习实现App的引导界面,本篇文章对设计流程及需要注意的地方做一个浅显的总结. 附上项目链接,供和我水平类似的初学者参考——http://files.cnblogs. ...

  9. 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

    [Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...

随机推荐

  1. 洛谷 P2234 [HNOI2002]营业额统计

    题目描述 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每天的营业额.分析营业情况是 ...

  2. Apache https 证书配置...

    没啥好说的..赋值粘贴 !! Listen 443 SSLSessionCache "shmcb:/apache/logs/ssl_scache(512000)" SSLSessi ...

  3. R语言学习笔记(三)

    5. 数据结构 5.1 数据结构简介 (1)向量 一个向量的所有元素必须有相同的类型(模式) (2)列表 列表可以非同质的 列表可按位置索引:lst[[2]] 抽取子列表:lst[c(2,5)] 列表 ...

  4. CF1012B Chemical table(构造)

    [Luogu-CF1012B] 还有重题 P5089[eJOI2018]元素周期表 题解原话 : 可以发现这个过程是不改变二分图中的连通分量的个数的 答案就是 连通分量数-1 证明 : 设一行或一列为 ...

  5. LeetCode74.搜索二维矩阵

    74.搜索二维矩阵 描述 编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值.该矩阵具有如下特性: 每行中的整数从左到右按升序排列. 每行的第一个整数大于前一行的最后一个整数. 示例 示 ...

  6. HDU - 2256 矩阵快速幂 带根号的递推

    题意:求$ [(\sqrt{2}+\sqrt{3})^{2n}] mod 1024 $ 分析: 把指数的2带入 原式等于 $ [(5+2\sqrt{6})^n] $ 有一个重要的结论是n次运算后其结果 ...

  7. 在python3.5中pip安装scrapy,遇到 error: Microsoft Visual C++ 14.0 is required

    本来在python3.5中安装scrapy一路顺畅(pip install scrapy),中间遇到一个 error: Microsoft Visual C++ 14.0 is required. x ...

  8. Ubuntu 15.04 下apt-get安装JDK

    [From] http://blog.csdn.net/skykingf/article/details/45250017 1.删除自带的OpenJDK [python] view plain cop ...

  9. Java中使用nextLine(); 没有输入就自动跳过的问题

    转自:https://www.cnblogs.com/1020182600HENG/p/6564795.html [问题分析] 必要的知识:in.nextLine();不能放在in.nextInt() ...

  10. 写给初学者的话---linux使用说明

    2018年noip上海赛区可以使用window操作系统的美梦终究还是破灭了!!!!上海大部分noip选手都陆陆续续开始改linux........好吧,那我们今天来看看linux操作系统中,noip选 ...