Android第一次打开应用程序,实现向导界面

转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/42079167

先说下思路:1.利用Preference存储数据,来记录是否是第一次打开软件

2.利用ViewPager实现几个图片之间的切换,在每一个图片下方用代码画圆圈,圆圈会跟着图片的改变而改变。

3.在最后一张图片。加入button点击事件。进入正式界面。

程序尽管非常easy,可是非常有用。

看下效果图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSGFycnlXZWFzbGV5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

我们会看到圆圈的点会依据图片改变而改变。

以下開始解说:

首先是activity_main.xml文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <android.support.v4.view.ViewPager
        android:id="@+id/guide_viewPager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@android:color/transparent" />

    <LinearLayout
        android:id="@+id/linearlayout"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_alignParentBottom="true"
        android:gravity="center_horizontal"
        android:orientation="horizontal" >
    </LinearLayout>

</RelativeLayout>

里面有一个viewPager控件和LinearLayout控件,当中LinearLayout是装小圆圈的

接下来是三个pager_layout1.xml。pager_layout2.xml。pager_layout3.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:background="@drawable/guide1"
    android:orientation="vertical" >

</LinearLayout>
<?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"
    android:background="@drawable/guide2"
    android:orientation="vertical" >

</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/guide3"
    android:gravity="center"
    android:orientation="vertical" >

    <Button
        android:id="@+id/guide_enter"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_gravity="center_horizontal|bottom"
        android:layout_marginBottom="0dp"
        android:background="@android:color/transparent"
         />

</FrameLayout>

我们能够看到前面两个layout就直接是个图片做背景。第三个我仅仅是加了一个透明的button。模仿以下的“马上进入”button。

(在这里,假设你有更好的方法,能够分享一下哈)

接下来是PreferenceUtil类,存储isShow的值

package com.example.guiddemo;

import android.content.Context;
import android.content.SharedPreferences;

public class PreferenceUtil {

	/**
     * 是否显示欢迎界面,true表示显示,false表示不显示
     */
    public static final String SHOW_GUIDE = "showguide";

	/**
	 * 保存到Preference
	 */
	public static void setBoolean(Context context, String key, boolean value) {
		// 得到SharedPreferences
		SharedPreferences preferences = context.getSharedPreferences(
				"preference", Context.MODE_PRIVATE);
		SharedPreferences.Editor editor = preferences.edit();
		editor.putBoolean(key, value);
		editor.commit();
	}

	/**
	 * 从Preference取出数据
	 */
	public static boolean getBoolean(Context context, String key) {
		SharedPreferences preferences = context.getSharedPreferences(
				"preference", Context.MODE_PRIVATE);
		// 返回key值,key值默认值是false
		return preferences.getBoolean(key, false);

	}
}

关于Preference存储和取出数据这些操作,我想我不用多说了吧。

主要功能都是在MainActivity里,我的代码里写了具体的凝视的

package com.example.guiddemo;

import java.util.ArrayList;
import java.util.List;

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.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

	/**
	 * 是否显示引导界面
	 */
	boolean isShow = false;
	/**
	 * ViewPager对象
	 */
	private ViewPager mViewPager;
	/**
	 * 装载小圆圈的LinearLayout
	 */
	private LinearLayout indicatorLayout;
	/**
	 * ViewPager的每个页面集合
	 */
	private List<View> views;
	/**
	 * ViewPager以下的小圆圈
	 */
	private ImageView[] mImageViews;
	/**
	 * PagerAdapter对象
	 */
	private MyPagerAdapter myPagerAdapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 得到Preference存储的isShow数据
		isShow = PreferenceUtil.getBoolean(this, PreferenceUtil.SHOW_GUIDE);
		//isShow=false;调试的时候用的
		if (isShow) {
			initLog();
		} else {
			initView();
		}
	}

	/**
	 * 进入登录界面
	 */
	private void initLog() {
		startActivity(new Intent(this, LogActivity.class));
		finish();
	}

	/**
	 * 进入引导界面
	 */
	private void initView() {
		mViewPager = (ViewPager) findViewById(R.id.guide_viewPager);
		indicatorLayout = (LinearLayout) findViewById(R.id.linearlayout);
		LayoutInflater inflater = LayoutInflater.from(this);
		views = new ArrayList<View>();
		views.add(inflater.inflate(R.layout.pager_layout1, null));
		views.add(inflater.inflate(R.layout.pager_layout2, null));
		views.add(inflater.inflate(R.layout.pager_layout3, null));
		myPagerAdapter = new MyPagerAdapter(this, views);
		mImageViews = new ImageView[views.size()];
		drawCircl();
		mViewPager.setAdapter(myPagerAdapter);
		mViewPager.setOnPageChangeListener(new GuidePageChangeListener());
	}

	/**
	 * 画圆圈
	 */
	private void drawCircl() {
		int num = views.size();
		for (int i = 0; i < num; i++) {
			//实例化每个mImageViews[i]
			mImageViews[i] = new ImageView(this);
			if (i == 0) {
				// 默认选中第一张照片,所以将第一个小圆圈变为icon_carousel_02
				mImageViews[i].setImageResource(R.drawable.icon_carousel_02);
			} else {
				mImageViews[i].setImageResource(R.drawable.icon_carousel_01);
			}
			// 给每个小圆圈都设置间隔
			mImageViews[i].setPadding(7, 7, 7, 7);
			LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
					LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
			params.gravity = Gravity.CENTER_VERTICAL;
			// 让每个小圆圈都在LinearLayout的CENTER_VERTICAL(中间垂直)
			indicatorLayout.addView(mImageViews[i], params);
		}

	}

	/**
	 *
	 * @author Harry 页面改变监听事件
	 */
	private class GuidePageChangeListener implements OnPageChangeListener {
		public void onPageScrollStateChanged(int arg0) {
		}

		public void onPageScrolled(int arg0, float arg1, int arg2) {
		}

		/**
		 * 页面有所改变。假设是当前页面,将小圆圈改为icon_carousel_02。其它页面则改为icon_carousel_01
		 */
		public void onPageSelected(int arg0) {
			for (int i = 0; i < mImageViews.length; i++) {
				if (arg0 != i) {
					mImageViews[i]
							.setImageResource(R.drawable.icon_carousel_01);
				} else {
					mImageViews[arg0]
							.setImageResource(R.drawable.icon_carousel_02);
				}
			}
		}
	}

	class MyPagerAdapter extends PagerAdapter {
		private List<View> mViews;
		private Activity mContext;

		public MyPagerAdapter(Activity context, List<View> views) {
			this.mViews = views;
			this.mContext = context;
		}

		@Override
		public int getCount() {
			return mViews.size();
		}

		@Override
		public boolean isViewFromObject(View arg0, Object arg1) {
			return arg0 == arg1;
		}

		@Override
		public int getItemPosition(Object object) {
			return super.getItemPosition(object);
		}

		@Override
		public void destroyItem(View arg0, int arg1, Object arg2) {
			((ViewPager) arg0).removeView(mViews.get(arg1));
		}

		/**
		 * 实例化页卡,假设变为最后一页。则获取它的button而且加入点击事件
		 */
		@Override
		public Object instantiateItem(View arg0, int arg1) {
			((ViewPager) arg0).addView(mViews.get(arg1), 0);
			if (arg1 == mViews.size() - 1) {
				TextView enterBtn = (TextView) arg0
						.findViewById(R.id.guide_enter);
				enterBtn.setOnClickListener(new OnClickListener() {
					@Override
					public void onClick(View v) {
						// 将isShow保存为true,并进入登录界面
						PreferenceUtil.setBoolean(mContext,
								PreferenceUtil.SHOW_GUIDE, true);
						initLog();
					}
				});
			}
			return mViews.get(arg1);
		}
	}

}

主要代码我就写完了。尽管比較简单。可是却非常有用,希望帮助到大家。

关于ViewPager相关知识,大家能够看这个博客,该博主讲的非常具体

http://blog.csdn.net/wangjinyu501/article/details/8169924

我的demo下载地址:

http://download.csdn.net/detail/harryweasley/8278633

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2024-10-23 03:24:48

Android第一次打开应用程序,实现向导界面的相关文章

Android之——激活应用程序的详情界面

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47303575 在Android系统自带的设置功能里,进入应用列表后,点击列表条目会进入应用的详情界面.那么我们自己可不可以写一个自己的应用程序,实现激活应用程序的详情界面呢?这个是可以实现的,那我们就一起来看看如何实现这个功能吧.不多说了,咱们直接进入主题. 一.原理 由于2.2之前的版本与2.2之后的版本激活应用程序的详情界面的方式不同,所以,我们先要获取到当前Android系

十五:首次打开(更新版本)APP向导界面

第一次打开APP的时候会有一个向导,比如如何使用APP,有哪些核心功能,或者新出版本的时候新功能的介绍等等.可以封装到一个继承自UIView的类中(ZWPushGuideView),并在Xib中进行自己需要的显示的向导内容,或纯代码. 首先查下当前版本号是多少 1 //打印出info.plist中的内容 2 ZWLog(@"%@",[NSBundle mainBundle].infoDictionary); 3 //上面打印出来的是个数组 4 ZWLog(@"%@"

Android应用打开手机的网络设置界面

App应用离不开与服务器进行网络交互,但是有时间在网络信息不好的时间,我们要给用户提示让进行网络设置,在我们应用中一般会有一个网络加载错误(失败)的页面,上面有操作控件,点击可以进入手机的网络设置界面,代码很简单: /**intent对象*/ Intent intent = null; /**判断手机系统的版本 即API大于10 就是3.0或以上版本及魅族手机*/ if (android.os.Build.VERSION.SDK_INT > 10 && !android.os.Bui

Android应用第一次打开,引导界面的实现

转载请注明出处,谢谢http://blog.csdn.net/harryweasley/article/details/42079167 先说下思路:1.利用Preference存储数据,来记录是否是第一次打开软件 2.利用ViewPager实现几个图片之间的切换,在每个图片下方用代码画圆圈,圆圈会跟着图片的改变而改变. 3.在最后一张图片,添加button点击事件,进入正式界面. 程序虽然很简单,但是很实用. 看下效果图: 我们会看到圆圈的点会根据图片改变而改变. 下面开始讲解: 首先是act

Android App 第一次打开时的引导界面

Android App 第一次打开时的引导界面,这个需求是非常多的.在写新项目的时候,刚好要用到,在网上找了一下 demo,没发现非满意的.所以只好自己动手写一个,分享一下,避免以后大家重复造轮子.效果图如下(虽然有点丑) 上面这个就是引导界面 GuideActivity 的界面了,实现思路很简单:主界面用 FrameLayout 布局,后面用 ViewPager 装载图片.下面几个小点指示当前滑动到哪个界面了,因为没现在的控制可用,所以自定义了一个 InidcatorView,布局文件如下 <

Android -- 分享功能和打开指定程序

打开指定程序                                                                                Intent intent = new Intent(); ComponentName cmp = new ComponentName("com.sina.weibo","com.sina.weibo.EditActivity"); intent.setAction(Intent.ACTION_M

Android 当打开“开发人员模式”中的“不保留活动”后,程序应当怎么保持正常执行

Android 当打开"开发人员模式"中的"不保留活动"后,程序应当怎么保持正常执行咧. .? 在这几天,我一直在纠结这个问题.从发现,程序出现这个问题,是由于"开发人员模式"中的"不保留活动"被打开了,到怎么获取"不保留活动"的值. 发现"不保留活动",是从京东客服端获得的灵感 得到"不保留活动"的值.是查看了Android原声的APP,Settings应用程序,查

android/iPhone:如何从browser直接打开应用程序或者没有应用程序打开应用商店

当用户在用mobile browser浏览该网站的时候会点击一个按钮/超链接,通过这个按钮的点击事情需要打开安装在本机的应用程序,或者如果本机没有安装该应用程序则打开应用商店并打开该程序在商店中的搜索结果页面.下面是实施跳转的HTML + javascript源代码. <html>   <head>          <meta name="viewport" content="width=device-width" />   &

Mac系统打开应用程序文件夹的方法+解决Android studio出现fetching android sdk component超时打不开的问题

Mac系统打开应用程序文件夹的方法 我们知道Mac系统文件系统不同于Windows,在Windows下的应用程序安装程序师以.exe为后缀,而mac系统则是以.dmg为后缀.从App Store下载下来的应用程序,双击dmg文件就会出现以下类似这种情形,这里笔者安装的是Android Studio: 把Android Studio拖动到Applications中即可完成安装. 跟Windows不一样,我们没有类似C盘专门存放系统应用程序的文件,有时候我们想去看看应用程序的安装文件,这时我们在Fi