微信是现在比较流行的应用了,在各大安卓市场几乎都是名列前茅了。说实话不得不羡慕腾讯庞大的用户群体,只要腾讯敢做,就会有很多人去用。废话不多说,下面就开始说一下如何实现微信的第一次启动程序的用户导航,ViewPager相信大家都不陌生了,是google放出的一个安卓低版本的兼容包android-support-v4.jar,里面有很多类我们可以去使用。那这个导航就是使用这个类来辅助完成的,在每一个View里放置一个图片,当我们使用ViewPager滑动界面的时候,就会看到一张张图片,从而实现这个效果,我们来看一下官方的:
其实使用过微信的用户都知道,每次启动程序都会有这个启动画面,如果是第一次使用当然还会出现后面的导航界面。下面以第一次使用为例,来说明如何实现。当启动出现进入第一个Activity,其实就是那个启动画面,有地球那个,之后会在这个Activity里面设置一个Handler去延迟(1秒,数值可以自己设定)执行启动导航界面的Activity,代码如下:
之后就进入前面说的导航页面了,其实就是多个View,每一个View就是一张图片,非常简单,而且就是基于ViewPager实现的,唯一有一些难度的就是当我们滑动图片的时候,下面那些移动的小圆点会随着改变。这种效果在其他程序的导航界面中也是很常见的。代码如下:
其实使用过微信的用户都知道,每次启动程序都会有这个启动画面,如果是第一次使用当然还会出现后面的导航界面。下面以第一次使用为例,来说明如何实现。当启动出现进入第一个Activity,其实就是那个启动画面,有地球那个,之后会在这个Activity里面设置一个Handler去延迟(1秒,数值可以自己设定)执行启动导航界面的Activity,代码如下:
- import android.os.Bundle;
- import android.os.Handler;
- import android.app.Activity;
- import android.content.Intent;
- import android.view.Window;
- import android.view.WindowManager;
- public class Appstart extends Activity{
- /*
- * 2012.11.1
- * @author:wangjinyu501
- * 这个Activiyt是程序启动画面,也就是一个图片。在这个Activity里使用了Handler一秒后会进入到引导Activity里面。
- */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏,注意一定要在绘制view之前调用这个方法,不然会出现
- //AndroidRuntimeException: requestFeature() must be called before adding content 这个错误。
- setContentView(R.layout.appstart);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); //全屏显示
- new Handler().postDelayed(new Runnable(){
- public void run(){
- Intent intent = new Intent (Appstart.this,Viewpager.class);
- startActivity(intent);
- this.finish();//结束本Activity
- }
- }, 1000);
- }
- }
import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Intent;
import android.view.Window;
import android.view.WindowManager;
public class Appstart extends Activity{
/*
* 2012.11.1
* @author:wangjinyu501
* 这个Activiyt是程序启动画面,也就是一个图片。在这个Activity里使用了Handler一秒后会进入到引导Activity里面。
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏,注意一定要在绘制view之前调用这个方法,不然会出现
//AndroidRuntimeException: requestFeature() must be called before adding content 这个错误。
setContentView(R.layout.appstart);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); //全屏显示
new Handler().postDelayed(new Runnable(){
public void run(){
Intent intent = new Intent (Appstart.this,Viewpager.class);
startActivity(intent);
this.finish();//结束本Activity
}
}, 1000);
}
}
之后就进入前面说的导航页面了,其实就是多个View,每一个View就是一张图片,非常简单,而且就是基于ViewPager实现的,唯一有一些难度的就是当我们滑动图片的时候,下面那些移动的小圆点会随着改变。这种效果在其他程序的导航界面中也是很常见的。代码如下:
- import java.util.ArrayList;
- import android.app.Activity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.support.v4.view.PagerAdapter;
- import android.support.v4.view.PagerTitleStrip;
- import android.support.v4.view.ViewPager;
- import android.support.v4.view.ViewPager.OnPageChangeListener;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.animation.Animation;
- import android.view.animation.TranslateAnimation;
- import android.widget.ImageView;
- public class Viewpager extends Activity {
- private ViewPager mViewPager;//声明ViewPager对象
- private PagerTitleStrip mPagerTitleStrip;//声明动画标题
- private ImageView mPageImg;// 动画图片
- private int currIndex = 0;//当前页面
- private ImageView mPage0,mPage1,mPage2,mPage3,mPage4,mPage5,mPage6,mPage7,mPage8;//声明导航图片对象
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.viewpager);
- mViewPager = (ViewPager)findViewById(R.id.viewpager);
- mViewPager.setOnPageChangeListener(new MyOnPageChangeListener());
- mPagerTitleStrip = (PagerTitleStrip)findViewById(R.id.pagertitle);
- mPage0 = (ImageView)findViewById(R.id.page0);
- mPage1 = (ImageView)findViewById(R.id.page1);
- mPage2 = (ImageView)findViewById(R.id.page2);
- mPage3 = (ImageView)findViewById(R.id.page3);
- mPage4 = (ImageView)findViewById(R.id.page4);
- mPage5 = (ImageView)findViewById(R.id.page5);
- mPage6 = (ImageView)findViewById(R.id.page6);
- mPage7 = (ImageView)findViewById(R.id.page7);
- mPage8 = (ImageView)findViewById(R.id.page8);
- //将要分页显示的View装入数组中
- LayoutInflater mLi = LayoutInflater.from(this);
- View view1 = mLi.inflate(R.layout.view1, null);
- View view2 = mLi.inflate(R.layout.view2, null);
- View view3 = mLi.inflate(R.layout.view3, null);
- View view4 = mLi.inflate(R.layout.view4, null);
- View view5 = mLi.inflate(R.layout.view5, null);
- View view6 = mLi.inflate(R.layout.view6, null);
- View view7 = mLi.inflate(R.layout.view7, null);
- View view8 = mLi.inflate(R.layout.view8, null);
- View view9 = mLi.inflate(R.layout.view9, null);
- //每个页面的view数据
- final ArrayList<View> views = new ArrayList<View>();
- views.add(view1);
- views.add(view2);
- views.add(view3);
- views.add(view4);
- views.add(view5);
- views.add(view6);
- views.add(view7);
- views.add(view8);
- views.add(view9);
- //每一个也没得标题
- final ArrayList<String> titles = new ArrayList<String>();
- titles.add("①");
- titles.add("②");
- titles.add("③");
- titles.add("④");
- titles.add("⑤");
- titles.add("⑥");
- titles.add("⑦");
- titles.add("⑧");
- titles.add("⑨");
- //填充ViewPager的数据适配器,我们重写即可
- PagerAdapter mPagerAdapter = new PagerAdapter() {
- @Override
- public boolean isViewFromObject(View arg0, Object arg1) {
- return arg0 == arg1;
- }
- @Override
- public int getCount() {
- return views.size();
- }
- @Override
- public void destroyItem(View container, int position, Object object) {
- ((ViewPager)container).removeView(views.get(position));
- }
- @Override
- public CharSequence getPageTitle(int position) {
- return titles.get(position);
- }
- @Override
- public Object instantiateItem(View container, int position) {
- ((ViewPager)container).addView(views.get(position));
- return views.get(position);
- }
- };
- mViewPager.setAdapter(mPagerAdapter);//与ListView用法相同,设置重写的Adapter。这样就实现了ViewPager的滑动效果。
- }