android实现App第一次进入时的引导学习界面
2015-02-12 17:15
483 查看
市面上不管是android软件还是Ios软件,当你下载第一次使用的时候,往往很多界面会有那种半透明的高亮的知道界面,教你们如何的操作。
因为我们所熟知的Android平台是一个又一个的Activity组成的,每一个Activity有一个或者多个View构成。所以说,当我们想显示一个界面的时候,我们首先想到的是建立一个Activity,然后所有的操作在Activity里面实现,或者是一个Dialog或者Toast。这种方式固然简单,但是在有些情况下,我们要求的只是简单的显示,用Activity显然是多余,这个时候,我们如何处理呢?
原来,整个Android的窗口机制是基于一个叫做 WindowManager,这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略我们以前的Activity或者Dialog之类的东东。其实我们的Activity或者Diolog底层的实现也是通过WindowManager,这个 WindowManager是全局的,整个系统就是这个唯一的东东。它是显示View的最底层了。
说了这么多,那我先上一张效果图:
那说说我们如何实现了,我在这里把这个类封装了下:
现在这个引导界面的工具类完成了,接下来就是显示了
这里我还要添加下屏幕的工具类:
然后在工程的anim文件中添加两个动画文件
一个是淡入的: fade_in.xml
一个是淡出的:fade_out.xml
最后,我们就在我们需要操作的界面进行操作了,代码如下:
好的,最后这个引导界面的效果就完成了。谢谢。不喜勿喷。
由于个人没什么金币,金币比较少,所以特此挣两个金币。如果愿意的话,你们可以下载该源码,谢谢:
http://download.csdn.net/detail/u011993368/9065185
因为我们所熟知的Android平台是一个又一个的Activity组成的,每一个Activity有一个或者多个View构成。所以说,当我们想显示一个界面的时候,我们首先想到的是建立一个Activity,然后所有的操作在Activity里面实现,或者是一个Dialog或者Toast。这种方式固然简单,但是在有些情况下,我们要求的只是简单的显示,用Activity显然是多余,这个时候,我们如何处理呢?
原来,整个Android的窗口机制是基于一个叫做 WindowManager,这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略我们以前的Activity或者Dialog之类的东东。其实我们的Activity或者Diolog底层的实现也是通过WindowManager,这个 WindowManager是全局的,整个系统就是这个唯一的东东。它是显示View的最底层了。
说了这么多,那我先上一张效果图:
那说说我们如何实现了,我在这里把这个类封装了下:
/** * @类名:GuideUtil * @类描述:引导工具界面 * @修改人: * @修改时间: * @修改备注: * @版本: */ public class GuideUtil { private Context context; private ImageView imgView; private WindowManager windowManager; private static GuideUtil instance = null; /** 是否第一次进入该程序 **/ private boolean isFirst = true; /**采用私有的方式,只保证这种通过单例来引用,同时保证这个对象不会存在多个**/ private GuideUtil() { } /**采用单例的设计模式,同时用了同步锁**/ public static GuideUtil getInstance() { synchronized (GuideUtil.class) { if (null == instance) { instance = new GuideUtil(); } } return instance; } private Handler handler = new Handler(Looper.getMainLooper()) { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 1: // 设置LayoutParams参数 final LayoutParams params = new WindowManager.LayoutParams(); // 设置显示的类型,TYPE_PHONE指的是来电话的时候会被覆盖,其他时候会在最前端,显示位置在stateBar下面,其他更多的值请查阅文档 params.type = WindowManager.LayoutParams.TYPE_PHONE; // 设置显示格式 params.format = PixelFormat.RGBA_8888; // 设置对齐方式 params.gravity = Gravity.LEFT | Gravity.TOP; // 设置宽高 params.width = ScreenUtils.getScreenWidth(context); params.height = ScreenUtils.getScreenHeight(context); // 设置动画 params.windowAnimations = R.style.view_anim; // 添加到当前的窗口上 windowManager.addView(imgView, params); break; } }; }; /** * @方法说明:初始化 * @方法名称:initGuide * @param context * @param drawableRourcesId:引导图片的资源Id * @返回值:void */ public void initGuide(Activity context, int drawableRourcesId) { /**如果不是第一次进入该界面**/ if (!isFirst) { return; } this.context = context; windowManager = context.getWindowManager(); /** 动态初始化图层**/ imgView = new ImageView(context); imgView.setLayoutParams(new LayoutParams( android.view.ViewGroup.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.MATCH_PARENT)); imgView.setScaleType(ScaleType.FIT_XY); imgView.setImageResource(drawableRourcesId); /**这里我特意用了一个handler延迟显示界面,主要是为了进入界面后,你能看到它淡入得动画效果,不然的话,引导界面就直接显示出来**/ handler.sendEmptyMessageDelayed(1, 1000); imgView.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { /** 点击图层之后,将图层移除**/ windowManager.removeView(imgView); } }); } public boolean isFirst() { return isFirst; } /** * @方法说明:设置是否第一次进入该程序 * @方法名称:setFirst * @param isFirst * @返回值:void */ public void setFirst(boolean isFirst) { this.isFirst = isFirst; } }
现在这个引导界面的工具类完成了,接下来就是显示了
这里我还要添加下屏幕的工具类:
/** * @类名:ScreenUtils * @类描述:屏幕工具类 * @修改人: * @修改时间: * @修改备注: * @版本: */ public class ScreenUtils { /** * @方法说明:获取DisplayMetrics对象 * @方法名称:getDisPlayMetrics * @param context * @return * @返回值:DisplayMetrics */ public static DisplayMetrics getDisPlayMetrics(Context context) { DisplayMetrics metric = new DisplayMetrics(); if (null != context) { ((Activity) context).getWindowManager().getDefaultDisplay() .getMetrics(metric); } return metric; } /** * @方法说明:获取屏幕的宽度(像素) * @方法名称:getScreenWidth * @param context * @return * @返回值:int */ public static int getScreenWidth(Context context) { int width = getDisPlayMetrics(context).widthPixels; return width; } /** * @方法说明:获取屏幕的高(像素) * @方法名称:getScreenHeight * @param context * @return * @返回值:int */ public static int getScreenHeight(Context context) { int height = getDisPlayMetrics(context).heightPixels; return height; } /** * @方法说明:屏幕密度(0.75 / 1.0 / 1.5) * @方法名称:getDensity * @param context * @return * @返回 float */ public static float getDensity(Context context) { float density = getDisPlayMetrics(context).density; return density; } /** * @方法说明:屏幕密度DPI(120 / 160 / 240) * @方法名称:getDensityDpi * @param context * @return * @返回 int */ public static int getDensityDpi(Context context) { int densityDpi = getDisPlayMetrics(context).densityDpi; return densityDpi; } }
然后在工程的anim文件中添加两个动画文件
一个是淡入的: fade_in.xml
一个是淡出的:fade_out.xml
fade_in.xml <?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:fromAlpha="0.0" android:toAlpha="1.0" /> fade_out.xml <?xml version="1.0" encoding="utf-8"?> <alpha xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:fromAlpha="1.0" android:toAlpha="0.0" />
最后,我们就在我们需要操作的界面进行操作了,代码如下:
public class MainActivity extends Activity { private GuideUtil guideUtil = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /**获取引导界面工具类的实例**/ guideUtil = GuideUtil.getInstance(); /**调用引导界面**/ guideUtil.initGuide(this, R.drawable.add_guide); findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { /**按钮的方式点击显示引导界面**/ guideUtil.initGuide(MainActivity.this, R.drawable.add_guide); } }); findViewById(R.id.button2).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { /**实际程序中,如果没有第一次了,那不会显示引导界面了。 这这时候,我们在setFirst中设置false,当我们点击的时候, 就没有效果了!不会再弹出了**/ guideUtil.setFirst(false); guideUtil.initGuide(MainActivity.this, R.drawable.add_guide); } }); } }
好的,最后这个引导界面的效果就完成了。谢谢。不喜勿喷。
由于个人没什么金币,金币比较少,所以特此挣两个金币。如果愿意的话,你们可以下载该源码,谢谢:
http://download.csdn.net/detail/u011993368/9065185
相关文章推荐
- Android实现第一次进入App时的引导学习界面
- 【Android】如何实现启动APP时引导页、欢迎页功能设置之(二)设置只在第一次启动APP时跳入引导界面
- android实现应用程序仅仅有在第一次启动时显示引导界面
- Android实现程序第一次安装的引导界面
- Android实战简易教程<六十四>(Android APP 引导页实现-第一次应用进入时加载)
- Android APP 引导页实现-第一次应用进入时加载
- Android APP 引导页实现-第一次应用进入时加载
- 【android】ViewPager实现引导界面以及进入下一个activity解决办法
- android 实现第一次进入程序的多个引导页
- 标签:ios开发 界面启动 APP下载安装第一次使用一般会显示一个首次启动引导界面然后进入主界面,非首次开启APP也通常会显示一个启动界面然后进入主界面。 1、本例首次启动显示First
- Android App 第一次打开时的引导界面
- android实现应用程序只有在第一次启动时显示引导界面
- android实现应用程序只有在第一次启动时显示引导界面
- Android实战简易教程-第六十四枪(Android APP 引导页实现-第一次应用进入时加载)
- Android程序第一次安装进入时出现引导界面,以后进入都不再出现引导界面
- android实现应用程序只有在第一次启动时显示引导界面 ,以后就不在显示
- android实现应用程序只在第一次启动时显示引导界面
- Android应用第一次打开,引导界面的实现
- Android 第一次进入App的时候进入引导页面
- android 用 SharedPreferences实现app首次使用显示引导界面,之后使用将不再出现