Android实现过渡动画、引导页 Android判断是否第一次启动App

Android实现过渡动画、引导页 Android判断是否第一次启动App,第1张

概述目前的App在安装后,第一次打开,都会显示两秒左右的logo,然后进入引导页。如果关闭App,再重新打开,则只会显示logo,然后直接进入主页。

目前的App在安装后,第一次打开,都会显示两秒左右的logo,然后进入引导页。如果关闭App,再重新打开,则只会显示logo,然后直接进入主页。

最近写了这个,记录一下。

首先是过渡动画,因为它不论App是否第一次启动都会显示。

这里我使用了Handler的postDelayed()方法。把过渡动画的Activity设为默认启动的Activity。在当前Activity中,执行postDelayed()方法,把延时的时长设为两秒即可。

过渡页面如下:Transition_vIEw.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:orIEntation="vertical"   androID:background="#fff"   >    <ImageVIEw     androID:src="@drawable/profile"     androID:layout_margintop="80dp"     androID:layout_gravity="center"     androID:layout_wIDth="100dp"     androID:layout_height="100dp" />  </linearLayout> 

这里因为我的图片背景是白色的,就没有设置linearLayout的背景色了,如果logo的背景色不一样,则可以进行设置。也可以直接用ImageVIEw解决。

过渡Activity如下:TransitionActivity.java

package com.ikok.TransitionandguIDingpage;  import androID.app.Activity; import androID.content.Intent; import androID.content.SharedPreferences; import androID.os.Bundle; import androID.os.Handler; import androID.vIEw.Window;  /**  * Created by Anonymous on 2016/3/25.  */ public class TransitionActivity extends Activity {    boolean isFirstIn = false;   private Intent intent;    @OverrIDe   protected voID onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     requestwindowFeature(Window.FEATURE_NO_Title);     setContentVIEw(R.layout.Transition_vIEw);      final SharedPreferences sharedPreferences = getSharedPreferences("is_first_in_data",MODE_PRIVATE);     isFirstIn = sharedPreferences.getBoolean("isFirstIn",true);     new Handler().postDelayed(new Runnable() {        @OverrIDe       public voID run() {         if (isFirstIn) { //          Toast.makeText(TransitionActivity.this,"First log",Toast.LENGTH_SHORT).show();           intent = new Intent(TransitionActivity.this,GuIDeActivity.class);           TransitionActivity.this.startActivity(intent);           TransitionActivity.this.finish();         } else {           intent = new Intent(TransitionActivity.this,MainActivity.class);           TransitionActivity.this.startActivity(intent);           TransitionActivity.this.finish();         }       }     },2000);    }  } 

显示了过渡动画后,则需要判断是否是第一次启动App了。因为根据是否是第一次启动App会判断进入引导页还是主页。
因为这个判断并不是一次执行就不需再执行了,而是每次启动App的时候都需要进行判断。所以这个判断的数据需要持久化。

且为了判断的时间很短,就不需要进行访问数据库,或者网络访问等耗时 *** 作了。直接使用 SharedPreferences  进行处理。

首先去指定 SharedPreferences  文件的名称,如果不存在则会创建一个。创建的文件存放在 /data/data/<package name>/shared_prefs/ 目录下。

第二个参数是指定对该文件的 *** 作模式。默认是 MODE_PRIVATE ,和直接传入0是一样的,表示只有当前程序才能对这个文件进行读写 *** 作。

MODE_MulTI_PROCESS 是用于多个程序对同一个 SharedPreferences  文件进行读写 *** 作。

创建好了文件,接下来我们读取标志,看程序是否是第一次启动App。

getBoolean("isFirstIn",true); 这个是用来获取标志的,它是用来取出文件中对应的键值对。第一个参数是键,第二个参数是默认值。

它会取出对应键的值,如果没有这个键,或者没有值,则直接使用默认值,即第二个参数。因为我创建SharedPreferences  文件的时候并没有创建这个键值对。

所以,它是读不出对应的键的值的,则会直接获取到 true 值。则App判断为第一次启动。接下来使用Intent,根据值,则开启了引导页即 GuIDeActivity 。

引导页 页面如下:guIDe_vIEw.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.support.v4.vIEw.VIEwPager     androID:ID="@+ID/vIEwpager"     androID:layout_wIDth="match_parent"     androID:layout_height="match_parent">    </androID.support.v4.vIEw.VIEwPager>  </linearLayout> 

这里是v4包下的VIEwPager。引导页我决定使用VIEwPager+FragmentPagerAdapter来实现。
如果我直接通过判断VIEwPager是否是最后一页,再左滑进入App主页,VIEwPager切换到主页时候会有一点问题。可能左滑了一点,但是还想看前两张引导页,再右滑,
结果是直接进入了App主页,而不是上一张。体验感很不好,所以考虑到最后一页上有一个按钮,来进行点击进入App主页。这样体验感会好一点。

引导页Activity如下:GuIDeAcitivity.java

package com.ikok.TransitionandguIDingpage;  import androID.os.Bundle; import androID.support.v4.app.Fragment; import androID.support.v4.app.FragmentActivity; import androID.support.v4.app.FragmentPagerAdapter; import androID.support.v4.vIEw.VIEwPager; import androID.vIEw.Window;  import java.util.ArrayList; import java.util.List;  /**  * Created by Anonymous on 2016/3/26.  */ public class GuIDeActivity extends FragmentActivity {    private VIEwPager mVIEwPager;   private FragmentPagerAdapter mAdapter;   private List<Fragment> mFragment = new ArrayList<Fragment>();    @OverrIDe   protected voID onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     requestwindowFeature(Window.FEATURE_NO_Title);     setContentVIEw(R.layout.guIDe_vIEw);      mVIEwPager = (VIEwPager) findVIEwByID(R.ID.vIEwpager);      Fragment guIDe1 = new GuIDe1();     Fragment guIDe2 = new GuIDe2();     Fragment guIDe3 = new GuIDe3();      mFragment.add(guIDe1);     mFragment.add(guIDe2);     mFragment.add(guIDe3);      mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {       @OverrIDe       public Fragment getItem(int position) {         return mFragment.get(position);       }        @OverrIDe       public int getCount() {         return mFragment.size();       }     };      // 为VIEwPager添加动画效果,3.0以上可用     mVIEwPager.setPagetransformer(true,new DepthPagetransformer()); //    mVIEwPager.setPagetransformer(true,new ZoomOutPagetransformer());     mVIEwPager.setAdapter(mAdapter);    } } 

中间创建了三个Fragment,去加载布局,布局就是在xml的根节点上添加了 background 属性。

这里我为VIEwPager的切换添加了切换动画。使用的 Google 官方文档上列出的两种动画效果。

当然可以进行自定义切换动画,我本来自定义了一个切换20度角的切换动画,但觉得不是很好看就没放上来了。

切换动画,低版本不支持。又添加了 nineoldandroID ,来使动画兼容到低版本。

最后一个页面如下:guIDe_vIEw3.xml

<?xml version="1.0" enCoding="utf-8"?> <relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"   androID:layout_wIDth="match_parent"   androID:background="@drawable/guIDe3"    androID:layout_height="match_parent">    <button     androID:ID="@+ID/into_app_btn"     androID:layout_wIDth="wrap_content"     androID:layout_height="wrap_content"     androID:text="进入App"     androID:textcolor="#fefefe"     androID:background="@drawable/button_shape"     androID:layout_alignParentBottom="true"     androID:layout_centerInParent="true"     androID:layout_marginBottom="50dp"     />  </relativeLayout> 

第三页的代码如下: GuIDe3.java

package com.ikok.TransitionandguIDingpage;  import androID.content.Intent; import androID.content.SharedPreferences; import androID.os.Bundle; import androID.support.v4.app.Fragment; import androID.vIEw.LayoutInflater; import androID.vIEw.VIEw; import androID.vIEw.VIEwGroup; import androID.Widget.button;  /**  * Created by Anonymous on 2016/3/27.  */ public class GuIDe3 extends Fragment {    private button mIntoAppBtn;   private VIEw vIEw;    @OverrIDe   public VIEw onCreateVIEw(LayoutInflater inflater,VIEwGroup container,Bundle savedInstanceState) {     vIEw = inflater.inflate(R.layout.guIDe_vIEw3,container,false);     return vIEw;   }    @OverrIDe   public voID onActivityCreated(Bundle savedInstanceState) {     super.onActivityCreated(savedInstanceState);     mIntoAppBtn = (button) vIEw.findVIEwByID(R.ID.into_app_btn);     mIntoAppBtn.setonClickListener(new VIEw.OnClickListener() {       @OverrIDe       public voID onClick(VIEw v) {         Intent intent = new Intent(getActivity(),MainActivity.class);         startActivity(intent);          SharedPreferences sharedPreferences = getActivity().getSharedPreferences("is_first_in_data",0x0000);         SharedPreferences.Editor editor = sharedPreferences.edit();         editor.putBoolean("isFirstIn",false);         editor.commit();          getActivity().finish();       }     });   } } 

这里我就对页面上的button绑定了一个点击事件监听器。点击进入主页,并且修改判断是否第一次进入App的标志值。
通过 SharedPreferences.Editor 对象去修改标志值。然后 commit ,没有 commit 是没有进行更新保存的。

这里getSharedPreferences() 的第二个参数,我直接使用了 0x0000,十六进制的0。

因为当时我使用 MODE_PRIVATE 的时候报错,然后我就通过查源码,发现 MODE_PRIVATE 的值就是 0x0000,所以我直接使用了这个 0x0000。

为什么报错呢?因为 MODE_PRIVATE 是Context 里的变量,在 Fragment 里无法识别。如果一定要用,则使用 Context.MODE_PRIVATE。

为什么 Activity 能用呢?因为 Activity 继承了 Context, 而 Fragment 没有继承 Context。

本来我做的是在主页的Activity中去修改这个标志值。但是后面考虑到,如果不是第一次启动,每次进入到主页,都需要修改一次标志值,即使它没有变化,还是多做了很多无用功。所以在最后一页的点击事件里进行修改。标志值只需要修改一次,引导页也只出现一次,正好。

主页就是创建工程默认的主页了。

其他事项:

给button加了样式属性。
button_shape.xml

<?xml version="1.0" enCoding="utf-8"?> <shape   xmlns:androID="http://schemas.androID.com/apk/res/androID"   androID:shape="rectangle">   <!-- 填充的颜色 -->   <solID androID:color="#00FFFFFF" />   <stroke androID:color="#fefefe"       androID:wIDth="1dp"     />   <!-- 设置按钮的四个角为弧形 -->   <!-- androID:radius 弧形的半径 -->   <corners androID:radius="5dip" />    <!-- padding:button里面的文字与button边界的间隔 -->   <padding     androID:left="10dp"     androID:top="10dp"     androID:right="10dp"     androID:bottom="10dp"     /> </shape> 

进入程序会出现一瞬间的空白,然后显示正常。这是因为Apptheme。这里我新建了一个空的样式。然后让默认启动的Activity去应用空的样式。
style.xml

<pre name="code" ><resources>    <!-- Base application theme. -->   <style name="Apptheme" parent="theme.AppCompat.light.DarkActionbar">     <!-- Customize your theme here. -->     <item name="colorPrimary">@color/colorPrimary</item>     <item name="colorPrimaryDark">@color/colorPrimaryDark</item>     <item name="colorAccent">@color/colorAccent</item>   </style>    <!--空程序样式-->   <style name="Emptytheme">    </style>  </resources> 

AndroIDManifest.xml

<?xml version="1.0" enCoding="utf-8"?> <manifest xmlns:androID="http://schemas.androID.com/apk/res/androID"   package="com.ikok.TransitionandguIDingpage">    <application     androID:allowBackup="true"     androID:icon="@drawable/profile"     androID:label="@string/app_name"     androID:supportsRtl="true"     androID:theme="@style/Apptheme">     <activity androID:name=".MainActivity">      </activity>     <!--应用空样式-->     <activity androID:name=".TransitionActivity"           androID:theme="@style/Emptytheme">       <intent-filter>         <action androID:name="androID.intent.action.MAIN" />          <category androID:name="androID.intent.category.LAUNCHER" />       </intent-filter>     </activity>     <activity androID:name=".GuIDeActivity">      </activity>   </application>  </manifest> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android实现过渡动画、引导页 Android判断是否第一次启动App全部内容,希望文章能够帮你解决Android实现过渡动画、引导页 Android判断是否第一次启动App所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1143535.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存