源码地址: http://www.eoeandroid.com/thread-584730-1-1.html

应用在第一次启动时,应先进入引导页面。怎样判断应用是否是第一次使用呢?这里我使用SharedPreferences 和 酷狗的 引导页面为例子,大概看了一下酷狗apk包里面的图片,发现酷狗的文字动画 里的文字 原来是 图片文字,不过这里我 就不用它 的图片文字,而是用textview来实现。

首先定义一个 Constants 类来 储存 SharedPreferences 配置文件的 内容。

  1. package com.happy.common;
  2. public class Constants {
  3. /**
  4. * --------------------------应用配置--------------------------
  5. **/
  6. /**
  7. * 配置文件的名称
  8. */
  9. public static String PREFERENCE_NAME = "happy.sharepreference.name";
  10. /**
  11. * 是否是第一次运行的key
  12. */
  13. public static String ISFIRST_KEY = "ISFIRST_KEY";
  14. /**
  15. * 是否是第一次运行
  16. */
  17. public static boolean ISFIRST = true;
  18. }

复制代码

添加一个类 DataUtil 来处理 SharedPreferences 配置文件的内容

  1. package com.happy.util;
  2. import android.content.Context;
  3. import android.content.SharedPreferences;
  4. import android.content.SharedPreferences.Editor;
  5. import com.happy.common.Constants;
  6. /**
  7. * SharedPreferences配置文件处理
  8. *
  9. * @author zhangliangming
  10. *
  11. */
  12. public class DataUtil {
  13. private static SharedPreferences preferences;
  14. /**
  15. * 初始化,将所有配置文件里的数据赋值给Constants
  16. *
  17. * @param context
  18. */
  19. public static void init(Context context) {
  20. if (preferences == null) {
  21. preferences = context.getSharedPreferences(
  22. Constants.PREFERENCE_NAME, 0);
  23. }
  24. }
  25. /**
  26. * 保存数据到SharedPreferences配置文件
  27. *
  28. * @param context
  29. * @param key
  30. *            关键字
  31. * @param data
  32. *            要保存的数据
  33. */
  34. public static void saveValue(Context context, String key, Object data) {
  35. if (preferences == null) {
  36. preferences = context.getSharedPreferences(
  37. Constants.PREFERENCE_NAME, 0);
  38. }
  39. Editor editor = preferences.edit();
  40. if (data instanceof Boolean) {
  41. editor.putBoolean(key, (Boolean) data);
  42. } else if (data instanceof Integer) {
  43. editor.putInt(key, (Integer) data);
  44. } else if (data instanceof String) {
  45. editor.putString(key, (String) data);
  46. } else if (data instanceof Float) {
  47. editor.putFloat(key, (Float) data);
  48. } else if (data instanceof Long) {
  49. editor.putFloat(key, (Long) data);
  50. }
  51. // 提交修改
  52. editor.commit();
  53. }
  54. /**
  55. * 从SharedPreferences配置文件中获取数据
  56. *
  57. * @param context
  58. * @param key
  59. *            关键字
  60. * @param defData
  61. *            默认获取的数据
  62. * @return
  63. */
  64. public static Object getValue(Context context, String key, Object defData) {
  65. if (preferences == null) {
  66. preferences = context.getSharedPreferences(
  67. Constants.PREFERENCE_NAME, 0);
  68. }
  69. if (defData instanceof Boolean) {
  70. return preferences.getBoolean(key, (Boolean) defData);
  71. } else if (defData instanceof Integer) {
  72. return preferences.getInt(key, (Integer) defData);
  73. } else if (defData instanceof String) {
  74. return preferences.getString(key, (String) defData);
  75. } else if (defData instanceof Float) {
  76. return preferences.getFloat(key, (Float) defData);
  77. } else if (defData instanceof Long) {
  78. return preferences.getLong(key, (Long) defData);
  79. }
  80. return null;
  81. }
  82. }

复制代码

修改 SplashActivity 的内容

  1. package com.happy.ui;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.AsyncTask;
  5. import android.os.Bundle;
  6. import android.os.Handler;
  7. import android.os.Message;
  8. import android.view.Menu;
  9. import android.widget.ImageView;
  10. import com.happy.common.Constants;
  11. import com.happy.util.DataUtil;
  12. public class SplashActivity extends Activity {
  13. /**
  14. * 跳转到主页面
  15. */
  16. private final int GOHOME = 0;
  17. /**
  18. * 跳转到引导页面
  19. */
  20. private final int GOGUIDE = 1;
  21. /**
  22. * 页面停留时间 3s
  23. */
  24. private final int SLEEPTIME = 3000;
  25. /**
  26. * splash ImageView
  27. */
  28. private ImageView splashImageView = null;
  29. private Handler mHandler = new Handler() {
  30. @Override
  31. public void handleMessage(Message msg) {
  32. switch (msg.what) {
  33. case GOHOME:
  34. goHome();
  35. break;
  36. case GOGUIDE:
  37. goGuide();
  38. break;
  39. default:
  40. break;
  41. }
  42. }
  43. };
  44. @Override
  45. protected void onCreate(Bundle savedInstanceState) {
  46. super.onCreate(savedInstanceState);
  47. setContentView(R.layout.activity_splash);
  48. init();
  49. loadData();
  50. }
  51. @Override
  52. public boolean onCreateOptionsMenu(Menu menu) {
  53. getMenuInflater().inflate(R.menu.splash, menu);
  54. return true;
  55. }
  56. private void init() {
  57. splashImageView = (ImageView) findViewById(R.id.splash);
  58. splashImageView.setBackgroundResource(R.drawable.splash);
  59. }
  60. private void loadData() {
  61. new AsyncTask<String, Integer, Integer>() {
  62. @Override
  63. protected Integer doInBackground(String... params) {
  64. boolean isFrist = (Boolean) DataUtil.getValue(
  65. SplashActivity.this, Constants.ISFIRST_KEY,
  66. Constants.ISFIRST);
  67. // 第一次执行
  68. if (isFrist) {
  69. return GOGUIDE;
  70. }
  71. // 配置数据初始化
  72. DataUtil.init(SplashActivity.this);
  73. return GOHOME;
  74. }
  75. @Override
  76. protected void onPostExecute(Integer result) {
  77. // 根据返回的result 跳转到不同的页面
  78. mHandler.sendEmptyMessageDelayed(result, SLEEPTIME);
  79. }
  80. }.execute("");
  81. }
  82. /**
  83. * 跳转到引导页面
  84. */
  85. protected void goGuide() {
  86. Intent intent = new Intent(this, GuideActivity.class);
  87. startActivity(intent);
  88. // 添加界面切换效果,注意只有Android的2.0(SdkVersion版本号为5)以后的版本才支持
  89. int version = Integer.valueOf(android.os.Build.VERSION.SDK);
  90. if (version >= 5) {
  91. overridePendingTransition(R.anim.anim_in, R.anim.anim_out);
  92. }
  93. finish();
  94. }
  95. /**
  96. * 跳转到主界面
  97. */
  98. protected void goHome() {
  99. Intent intent = new Intent(this, MainActivity.class);
  100. startActivity(intent);
  101. // 添加界面切换效果,注意只有Android的2.0(SdkVersion版本号为5)以后的版本才支持
  102. int version = Integer.valueOf(android.os.Build.VERSION.SDK);
  103. if (version >= 5) {
  104. overridePendingTransition(R.anim.anim_in, R.anim.anim_out);
  105. }
  106. finish();
  107. }
  108. }

复制代码

添加 GuideActivity 引导页面

  1. package com.happy.ui;
  2. import java.util.ArrayList;
  3. import android.graphics.Color;
  4. import android.os.Bundle;
  5. import android.support.v4.app.Fragment;
  6. import android.support.v4.app.FragmentActivity;
  7. import android.support.v4.app.FragmentManager;
  8. import android.support.v4.app.FragmentPagerAdapter;
  9. import android.support.v4.view.ViewPager;
  10. import android.support.v4.view.ViewPager.OnPageChangeListener;
  11. import android.view.KeyEvent;
  12. import android.view.Menu;
  13. import android.widget.ImageView;
  14. import android.widget.Toast;
  15. import com.happy.fragment.GuideFragment;
  16. import com.happy.manage.ActivityManage;
  17. public class GuideActivity extends FragmentActivity {
  18. private ViewPager viewPager;
  19. private TabFragmentPagerAdapter tabFragmentPagerAdapter;
  20. /**
  21. * 页面列表
  22. */
  23. private ArrayList<Fragment> fragmentList;
  24. private GuideFragment firstGuideFragment;
  25. private GuideFragment secondGuideFragment;
  26. private GuideFragment thirdGuideFragment;
  27. private GuideFragment fourthGuideFragment;
  28. /** 将小圆点的图片用数组表示 */
  29. private ImageView[] imageViews;
  30. /**
  31. * 当前索引
  32. */
  33. private int TAB_INDEX = 0;
  34. private long mExitTime;
  35. @Override
  36. protected void onCreate(Bundle savedInstanceState) {
  37. super.onCreate(savedInstanceState);
  38. setContentView(R.layout.activity_guide);
  39. init();
  40. // 将activity添加到ActivityManage
  41. ActivityManage.getInstance().addActivity(this);
  42. }
  43. @Override
  44. public boolean onCreateOptionsMenu(Menu menu) {
  45. getMenuInflater().inflate(R.menu.guide, menu);
  46. return true;
  47. }
  48. /**
  49. * 初始化
  50. */
  51. private void init() {
  52. viewPager = (ViewPager) findViewById(R.id.viewpager);
  53. fragmentList = new ArrayList<Fragment>();
  54. //
  55. firstGuideFragment = new GuideFragment();
  56. firstGuideFragment.setParentRelativeLayoutColor(Color
  57. .rgb(163, 161, 212));
  58. firstGuideFragment.setMainTitleText("猜你喜欢");
  59. firstGuideFragment.setSecondTitleText("总能猜到,你爱听的。");
  60. firstGuideFragment.setCentPICImage(R.drawable.guide_first_person);
  61. firstGuideFragment.setInitAni(true);
  62. //
  63. secondGuideFragment = new GuideFragment();
  64. secondGuideFragment.setParentRelativeLayoutColor(Color.rgb(254, 153,
  65. 153));
  66. secondGuideFragment.setMainTitleText("蝰蛇音效");
  67. secondGuideFragment.setSecondTitleText("三大神器,听觉重生。");
  68. secondGuideFragment.setCentPICImage(R.drawable.guide_second_person);
  69. //
  70. thirdGuideFragment = new GuideFragment();
  71. thirdGuideFragment
  72. .setParentRelativeLayoutColor(Color.rgb(225, 184, 94));
  73. thirdGuideFragment.setMainTitleText("听歌识曲");
  74. thirdGuideFragment.setSecondTitleText("全新改版,更快更准。");
  75. thirdGuideFragment
  76. .setCentPICImage(R.drawable.guide_third_bottom_person);
  77. //
  78. fourthGuideFragment = new GuideFragment();
  79. fourthGuideFragment.setParentRelativeLayoutColor(Color
  80. .rgb(77, 199, 255));
  81. fourthGuideFragment.setMainTitleText("K歌送礼");
  82. fourthGuideFragment.setSecondTitleText("免费领K币,送礼推榜首。");
  83. fourthGuideFragment
  84. .setCentPICImage(R.drawable.guide_four_bottom_person);
  85. fourthGuideFragment.setGoToImageViewVisibility(true);
  86. //
  87. fragmentList.add(firstGuideFragment);
  88. fragmentList.add(secondGuideFragment);
  89. fragmentList.add(thirdGuideFragment);
  90. fragmentList.add(fourthGuideFragment);
  91. // 创建imageviews数组,大小是要显示的图片的数量
  92. imageViews = new ImageView[fragmentList.size()];
  93. int i = 0;
  94. imageViews[i++] = (ImageView) findViewById(R.id.point_1);
  95. imageViews[i++] = (ImageView) findViewById(R.id.point_2);
  96. imageViews[i++] = (ImageView) findViewById(R.id.point_3);
  97. imageViews[i++] = (ImageView) findViewById(R.id.point_4);
  98. for (int j = 0; j < imageViews.length; j++) {
  99. if (j != 0) {
  100. imageViews[j]
  101. .setBackgroundResource(R.drawable.music_zone_indicator_common);
  102. } else {
  103. imageViews[j]
  104. .setBackgroundResource(R.drawable.music_zone_indicator_current);
  105. }
  106. }
  107. tabFragmentPagerAdapter = new TabFragmentPagerAdapter(
  108. getSupportFragmentManager());
  109. viewPager.setAdapter(tabFragmentPagerAdapter);
  110. viewPager.setOnPageChangeListener(new TabOnPageChangeListener());
  111. viewPager.setCurrentItem(0);
  112. }
  113. /**
  114. *
  115. * @author Administrator Fragment滑动事件
  116. */
  117. public class TabFragmentPagerAdapter extends FragmentPagerAdapter {
  118. public TabFragmentPagerAdapter(FragmentManager fm) {
  119. super(fm);
  120. }
  121. @Override
  122. public Fragment getItem(int arg0) {
  123. return fragmentList.get(arg0);
  124. }
  125. @Override
  126. public int getCount() {
  127. return fragmentList.size();
  128. }
  129. }
  130. /**
  131. *
  132. * viewpager的监听事件
  133. *
  134. */
  135. private class TabOnPageChangeListener implements OnPageChangeListener {
  136. public void onPageScrollStateChanged(int arg0) {
  137. }
  138. public void onPageScrolled(int arg0, float arg1, int arg2) {
  139. }
  140. public void onPageSelected(int position) {
  141. // 设置导航索引
  142. for (int i = 0; i < imageViews.length; i++) {
  143. // 不是当前选中的page,其小圆点设置为未选中的状态
  144. if (position != i) {
  145. imageViews[i]
  146. .setBackgroundResource(R.drawable.music_zone_indicator_common);
  147. } else {
  148. imageViews[position]
  149. .setBackgroundResource(R.drawable.music_zone_indicator_current);
  150. }
  151. }
  152. boolean isRightToLeft = false;
  153. if (TAB_INDEX < position) {
  154. isRightToLeft = true;
  155. }
  156. TAB_INDEX = position;
  157. switch (position) {
  158. case 0:
  159. firstGuideFragment.startTitleAnimation(isRightToLeft);
  160. secondGuideFragment.stopAnimation();
  161. thirdGuideFragment.stopAnimation();
  162. fourthGuideFragment.stopAnimation();
  163. break;
  164. case 1:
  165. secondGuideFragment.startTitleAnimation(isRightToLeft);
  166. firstGuideFragment.stopAnimation();
  167. thirdGuideFragment.stopAnimation();
  168. fourthGuideFragment.stopAnimation();
  169. break;
  170. case 2:
  171. thirdGuideFragment.startTitleAnimation(isRightToLeft);
  172. firstGuideFragment.stopAnimation();
  173. secondGuideFragment.stopAnimation();
  174. fourthGuideFragment.stopAnimation();
  175. break;
  176. case 3:
  177. fourthGuideFragment.startTitleAnimation(isRightToLeft);
  178. firstGuideFragment.stopAnimation();
  179. secondGuideFragment.stopAnimation();
  180. thirdGuideFragment.stopAnimation();
  181. break;
  182. default:
  183. break;
  184. }
  185. }
  186. }
  187. @Override
  188. public boolean onKeyDown(int keyCode, KeyEvent event) {
  189. if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
  190. if ((System.currentTimeMillis() - mExitTime) > 2000) {
  191. Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
  192. mExitTime = System.currentTimeMillis();
  193. } else {
  194. ActivityManage.getInstance().exit();
  195. }
  196. return false;
  197. }
  198. return super.onKeyDown(keyCode, event);
  199. }
  200. }

复制代码

GuideActivity 的布局文件 activity_guide

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. tools:context=".GuideActivity" >
  6. <android.support.v4.view.ViewPager
  7. android:id="@+id/viewpager"
  8. android:layout_width="fill_parent"
  9. android:layout_height="fill_parent"
  10. android:overScrollMode="never" >
  11. </android.support.v4.view.ViewPager>
  12. <RelativeLayout
  13. android:layout_width="wrap_content"
  14. android:layout_height="50dp"
  15. android:layout_alignParentBottom="true"
  16. android:layout_centerHorizontal="true" >
  17. <ImageView
  18. android:id="@+id/point_1"
  19. android:layout_width="10dp"
  20. android:layout_height="10dp"
  21. android:layout_centerVertical="true"
  22. android:background="@drawable/music_zone_indicator_current" />
  23. <ImageView
  24. android:id="@+id/point_2"
  25. android:layout_width="10dp"
  26. android:layout_height="10dp"
  27. android:layout_centerVertical="true"
  28. android:layout_marginLeft="10dp"
  29. android:layout_toRightOf="@+id/point_1"
  30. android:background="@drawable/music_zone_indicator_common" />
  31. <ImageView
  32. android:id="@+id/point_3"
  33. android:layout_width="10dp"
  34. android:layout_height="10dp"
  35. android:layout_centerVertical="true"
  36. android:layout_marginLeft="10dp"
  37. android:layout_toRightOf="@+id/point_2"
  38. android:background="@drawable/music_zone_indicator_common" />
  39. <ImageView
  40. android:id="@+id/point_4"
  41. android:layout_width="10dp"
  42. android:layout_height="10dp"
  43. android:layout_centerVertical="true"
  44. android:layout_marginLeft="10dp"
  45. android:layout_toRightOf="@+id/point_3"
  46. android:background="@drawable/music_zone_indicator_common" />
  47. </RelativeLayout>
  48. </RelativeLayout>

复制代码

引导界面 这里用 viewpager 来实现

添加 GuideFragment 来实现界面

  1. package com.happy.fragment;
  2. import android.content.Intent;
  3. import android.graphics.Color;
  4. import android.os.AsyncTask;
  5. import android.os.Bundle;
  6. import android.os.Handler;
  7. import android.os.Message;
  8. import android.support.v4.app.Fragment;
  9. import android.view.LayoutInflater;
  10. import android.view.View;
  11. import android.view.View.OnClickListener;
  12. import android.view.ViewGroup;
  13. import android.view.animation.Animation;
  14. import android.view.animation.LinearInterpolator;
  15. import android.view.animation.TranslateAnimation;
  16. import android.widget.ImageView;
  17. import android.widget.RelativeLayout;
  18. import android.widget.TextView;
  19. import com.happy.common.Constants;
  20. import com.happy.ui.MainActivity;
  21. import com.happy.ui.R;
  22. import com.happy.util.DataUtil;
  23. public class GuideFragment extends Fragment {
  24. private View mMainView;
  25. /**
  26. * 初始化后执行动画
  27. */
  28. private boolean isInitAni = false;
  29. /**
  30. * 是否有动画
  31. */
  32. private boolean hasAni = false;
  33. /**
  34. * 背景
  35. */
  36. private RelativeLayout parentRelativeLayout;
  37. private int color = Color.rgb(163, 161, 212);
  38. /**
  39. * 主标题
  40. */
  41. private TextView mainTitleTextView;
  42. /**
  43. * 主标题内容
  44. */
  45. private String mainText;
  46. /**
  47. * 右到左标题动画
  48. */
  49. private TranslateAnimation rightToLeftTranslateAnimation;
  50. /**
  51. * 左到右标题动画
  52. */
  53. private TranslateAnimation leftToRightTranslateAnimation;
  54. /**
  55. * 副标题
  56. */
  57. private TextView secondTitleTextView;
  58. /**
  59. * 副标题内容
  60. */
  61. private String secondText;
  62. /**
  63. * 中部图片
  64. */
  65. private ImageView centPICImageView;
  66. private int centPICImage = R.drawable.guide_first_person;
  67. /**
  68. * 底部按钮图片
  69. */
  70. private ImageView goToImageView;
  71. /**
  72. * 是否可视
  73. */
  74. private boolean visibility = false;
  75. public GuideFragment() {
  76. }
  77. @Override
  78. public void onCreate(Bundle savedInstanceState) {
  79. super.onCreate(savedInstanceState);
  80. initComponent();
  81. }
  82. @Override
  83. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  84. Bundle savedInstanceState) {
  85. ViewGroup viewGroup = (ViewGroup) mMainView.getParent();
  86. if (viewGroup != null) {
  87. viewGroup.removeAllViewsInLayout();
  88. }
  89. return mMainView;
  90. }
  91. private void initComponent() {
  92. LayoutInflater inflater = getActivity().getLayoutInflater();
  93. mMainView = inflater.inflate(R.layout.fragement_guide, null, false);
  94. // 背景图片
  95. parentRelativeLayout = (RelativeLayout) mMainView
  96. .findViewById(R.id.parent);
  97. parentRelativeLayout.setBackgroundColor(color);
  98. // 主标题
  99. mainTitleTextView = (TextView) mMainView.findViewById(R.id.main_title);
  100. mainTitleTextView.setText(mainText);
  101. mainTitleTextView.setVisibility(View.INVISIBLE);
  102. // 副标题
  103. secondTitleTextView = (TextView) mMainView
  104. .findViewById(R.id.second_title);
  105. secondTitleTextView.setText(secondText);
  106. secondTitleTextView.setVisibility(View.INVISIBLE);
  107. // 中部图片
  108. centPICImageView = (ImageView) mMainView.findViewById(R.id.center_pic);
  109. centPICImageView.setBackgroundResource(centPICImage);
  110. // 跳转按钮
  111. goToImageView = (ImageView) mMainView.findViewById(R.id.goTo);
  112. if (visibility) {
  113. goToImageView.setVisibility(View.VISIBLE);
  114. } else {
  115. goToImageView.setVisibility(View.INVISIBLE);
  116. }
  117. goToImageView.setOnClickListener(new ItemOnClick());
  118. // 右到左动画
  119. rightToLeftTranslateAnimation = new TranslateAnimation(
  120. Animation.RELATIVE_TO_PARENT, +1.0f,
  121. Animation.RELATIVE_TO_PARENT, 0.0f,
  122. Animation.RELATIVE_TO_PARENT, 0.0f,
  123. Animation.RELATIVE_TO_PARENT, 0.0f);
  124. rightToLeftTranslateAnimation.setInterpolator(new LinearInterpolator());
  125. rightToLeftTranslateAnimation.setFillAfter(true);
  126. rightToLeftTranslateAnimation.setDuration(1000);
  127. // 左到右动画
  128. leftToRightTranslateAnimation = new TranslateAnimation(
  129. Animation.RELATIVE_TO_PARENT, -1.0f,
  130. Animation.RELATIVE_TO_PARENT, 0.0f,
  131. Animation.RELATIVE_TO_PARENT, 0.0f,
  132. Animation.RELATIVE_TO_PARENT, 0.0f);
  133. leftToRightTranslateAnimation.setInterpolator(new LinearInterpolator());
  134. leftToRightTranslateAnimation.setFillAfter(true);
  135. leftToRightTranslateAnimation.setDuration(1000);
  136. if (isInitAni) {
  137. startAnimation();
  138. }
  139. }
  140. /**
  141. * 开始动画
  142. */
  143. private void startAnimation() {
  144. new AsyncTask<String, Integer, String>() {
  145. @Override
  146. protected String doInBackground(String... params) {
  147. try {
  148. Thread.sleep(100);
  149. } catch (InterruptedException e) {
  150. e.printStackTrace();
  151. }
  152. startTitleAnimation(true);
  153. return null;
  154. }
  155. }.execute("");
  156. }
  157. /**
  158. * 设置背景颜色
  159. *
  160. * @param color
  161. */
  162. public void setParentRelativeLayoutColor(int color) {
  163. this.color = color;
  164. }
  165. /**
  166. * 设置底部按钮是否可视
  167. *
  168. * @param visibility
  169. */
  170. public void setGoToImageViewVisibility(boolean visibility) {
  171. this.visibility = visibility;
  172. }
  173. /**
  174. * 设置主标题内容
  175. *
  176. * @param mainText
  177. *            主标题内容
  178. */
  179. public void setMainTitleText(String mainText) {
  180. this.mainText = mainText;
  181. }
  182. /**
  183. * 设置副标题内容
  184. *
  185. * @param secondText
  186. *            副标题内容
  187. */
  188. public void setSecondTitleText(String secondText) {
  189. this.secondText = secondText;
  190. }
  191. /**
  192. * 设置中部图片
  193. *
  194. * @param centPICImage
  195. */
  196. public void setCentPICImage(int centPICImage) {
  197. this.centPICImage = centPICImage;
  198. }
  199. private Handler mHandler = new Handler() {
  200. @Override
  201. public void handleMessage(Message msg) {
  202. if (hasAni) {
  203. mainTitleTextView.clearAnimation();
  204. secondTitleTextView.clearAnimation();
  205. }
  206. boolean isRightToLeft = (Boolean) msg.obj;
  207. if (isRightToLeft) {
  208. mainTitleTextView.startAnimation(rightToLeftTranslateAnimation);
  209. secondTitleTextView
  210. .startAnimation(rightToLeftTranslateAnimation);
  211. } else {
  212. mainTitleTextView.startAnimation(leftToRightTranslateAnimation);
  213. secondTitleTextView
  214. .startAnimation(leftToRightTranslateAnimation);
  215. }
  216. hasAni = true;
  217. }
  218. };
  219. /**
  220. * 设置标题动画
  221. *
  222. * @param isRightToLeft
  223. */
  224. public void startTitleAnimation(boolean isRightToLeft) {
  225. Message msg = new Message();
  226. msg.obj = isRightToLeft;
  227. mHandler.sendMessage(msg);
  228. }
  229. /**
  230. * 设置动画
  231. *
  232. * @param isInitAni
  233. */
  234. public void setInitAni(boolean isInitAni) {
  235. this.isInitAni = isInitAni;
  236. }
  237. /**
  238. * 停止动画
  239. */
  240. public void stopAnimation() {
  241. if (mainTitleTextView != null && secondTitleTextView != null) {
  242. if (hasAni) {
  243. mainTitleTextView.clearAnimation();
  244. secondTitleTextView.clearAnimation();
  245. mainTitleTextView.setVisibility(View.INVISIBLE);
  246. secondTitleTextView.setVisibility(View.INVISIBLE);
  247. hasAni = false;
  248. }
  249. }
  250. }
  251. class ItemOnClick implements OnClickListener {
  252. @Override
  253. public void onClick(View v) {
  254. switch (v.getId()) {
  255. case R.id.goTo:
  256. goHome();
  257. break;
  258. }
  259. }
  260. /**
  261. * 跳转到主页面
  262. */
  263. private void goHome() {
  264. // 设置是否是第一次运行参数
  265. DataUtil.saveValue(getActivity(), Constants.ISFIRST_KEY, false);
  266. Intent intent = new Intent(getActivity(), MainActivity.class);
  267. startActivity(intent);
  268. // 添加界面切换效果,注意只有Android的2.0(SdkVersion版本号为5)以后的版本才支持
  269. int version = Integer.valueOf(android.os.Build.VERSION.SDK);
  270. if (version >= 5) {
  271. getActivity().overridePendingTransition(R.anim.anim_in,
  272. R.anim.anim_out);
  273. }
  274. getActivity().finish();
  275. }
  276. }
  277. }

复制代码

GuideFragment 布局文件 fragement_guide

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. tools:context=".GuideFragment" >
  7. <RelativeLayout
  8. android:id="@+id/parent"
  9. android:layout_width="fill_parent"
  10. android:layout_height="fill_parent" >
  11. <RelativeLayout
  12. android:layout_width="fill_parent"
  13. android:layout_height="fill_parent"
  14. android:layout_marginBottom="50dp" >
  15. <TextView
  16. android:id="@+id/main_title"
  17. android:layout_width="200dp"
  18. android:layout_height="wrap_content"
  19. android:layout_centerHorizontal="true"
  20. android:layout_marginBottom="5dp"
  21. android:layout_marginTop="30dp"
  22. android:gravity="center_horizontal"
  23. android:text="主标题"
  24. android:textColor="#ffffff"
  25. android:textSize="45dp" />
  26. <TextView
  27. android:id="@+id/second_title"
  28. android:layout_width="wrap_content"
  29. android:layout_height="wrap_content"
  30. android:layout_below="@+id/main_title"
  31. android:layout_centerHorizontal="true"
  32. android:layout_marginBottom="5dp"
  33. android:layout_marginTop="5dp"
  34. android:gravity="center_horizontal"
  35. android:text="副标题"
  36. android:textColor="#ffffff"
  37. android:textSize="30dp" />
  38. <ImageView
  39. android:id="@+id/center_pic"
  40. android:layout_width="250dp"
  41. android:layout_height="250dp"
  42. android:layout_above="@+id/goTo"
  43. android:layout_below="@+id/second_title"
  44. android:layout_centerHorizontal="true"
  45. android:layout_marginBottom="10dp"
  46. android:layout_marginTop="10dp" />
  47. <ImageView
  48. android:id="@+id/goTo"
  49. android:layout_width="wrap_content"
  50. android:layout_height="wrap_content"
  51. android:layout_alignParentBottom="true"
  52. android:layout_centerHorizontal="true"
  53. android:layout_marginBottom="5dp"
  54. android:layout_marginTop="5dp"
  55. android:background="@drawable/guide_goto"
  56. android:clickable="true" />
  57. </RelativeLayout>
  58. </RelativeLayout>
  59. </RelativeLayout>

复制代码

差点 忘记了 ActivityManage 类 处理activity

  1. package com.happy.manage;
  2. import java.util.LinkedList;
  3. import java.util.List;
  4. import android.app.Activity;
  5. /**
  6. * activity的管理:退出时,遍历所有的activity,并finish,最后退出系统。
  7. *
  8. * @author Administrator 最近修改时间2013年12月10日
  9. */
  10. public class ActivityManage {
  11. /**
  12. * activity列表
  13. */
  14. private List<Activity> activityList = new LinkedList<Activity>();
  15. private static ActivityManage instance = null;
  16. private ActivityManage() {
  17. }
  18. public static ActivityManage getInstance() {
  19. if (instance == null) {
  20. instance = new ActivityManage();
  21. }
  22. return instance;
  23. }
  24. /**
  25. * 添加
  26. *
  27. * @param activity
  28. */
  29. public void addActivity(Activity activity) {
  30. activityList.add(activity);
  31. }
  32. /**
  33. * 退出
  34. */
  35. public void exit() {
  36. for (Activity activity : activityList) {
  37. if (!activity.isFinishing() && activity != null) {
  38. activity.finish();
  39. }
  40. }
  41. int id = android.os.Process.myPid();
  42. if (id != 0) {
  43. android.os.Process.killProcess(id);
  44. }
  45. }
  46. }

复制代码

乐乐音乐播放器(三) 第一次引导页面相关推荐

  1. 乐乐音乐播放器 功能介绍(一)

    该播放器主要完成的功能如下: 1.      引导页面.每个应用在启动的时候都会有一个引导页面,该引导页面的功能就是让用户可以在短时间内了解该应用的功能和相关操作. 2.      欢迎页面.应用在启 ...

  2. Java乐乐_java音乐播放器-乐乐音乐播放器详解

    乐乐音乐目前是基于musique开发的一个java音乐播放器,支持桌面歌词,卡拉ok歌词.详细请移步到我的博客. http://my.oschina.net/u/437124/blog/598749 ...

  3. android调用音乐播放器,三种方法

    小弟想请问一下,如何在自己写的程序中调用系统的音乐播放器呢. 我在google上搜索了,主要是有两种方法,但是都不是我想要的. 第一种是,使用mp3音乐文件的uri,和intent,进行调用,但是这种 ...

  4. 乐乐音乐播放器 欢迎页面(二)

    从开发的流程来看,引导页面应该是开发者完成相关的app所有的功能后,最后再编写的.所以现在先来写开机欢迎页面. 1. 先设置主页面 为 splash 页面. <activity android: ...

  5. Vue实现仿音乐播放器14-实现搜索页面以及功能

    效果 实现 百度音乐搜索API说明 例:method=baidu.ting.search.catalogSug&query=海阔天空 参数:query = " //搜索关键字 搜索页 ...

  6. Vue实战:音乐播放器(一) 页面效果

    先看一下效果图 首页 歌单详情页 歌手列表 歌手详情页 排行页面 榜单的详情页(排序样式) 搜索页面 搜索结果 播放器内核 歌词自动滚动 播放列表 用户中心 转载于:https://www.cnblo ...

  7. Vue实现仿音乐播放器12-实现歌手页面效果

    效果 实现 百度音乐API歌手说明 例:method=baidu.ting.artist.getInfo&tinguid=877578 参数: tinguid = 877578 //歌手tin ...

  8. 乐乐音乐播放器(六) 仿酷狗的左滑菜单

    源码下载:http://www.eoeandroid.com/thread-588446-1-1.html 该功能主要是使用开源的SlidingMenu来实现的,其中盗用了这篇文章的大部分代码,htt ...

  9. 乐乐音乐:Android音乐播放器及动感(KTV)歌词相关博客汇总

    相关简介 Java Swing PC版本乐乐音乐播放器 乐乐音乐PC播放器单机版本,支持ape,wav,flac,mp3等多种格式,支持动态ksc.hrc.krc歌词文件和支持和显示翻译歌词和音译歌词 ...

最新文章

  1. 《线性代数》概念定理大全!
  2. 【运维】阿里云宝塔面板部署JavaWeb项目
  3. 选 Offer 的 5 个维度
  4. 乱码的根本原因是字节和字符的问题(转)
  5. 一个简单的小技巧,监控网页所有动态标签创建的调用处
  6. 团队任务3:每日立会(2018-10-25)
  7. arduino 温度调节器_Arduino用温湿度传感器控制继电器,为什么点了串口助手才能运行,拔掉usb线,直接外界9V电源却用不了...
  8. 2022-2028全球STEAM教育行业调研及趋势分析报告
  9. [AHOI2007]密码箱
  10. 强烈推荐几款IDEA插件,12款小白神器
  11. linux下eclipse开发storm,如何在eclipse调试storm程序?
  12. 13.第十四章.文档和配置管理
  13. 关于印发《黑龙江省农村土地承包经营权确权登记试点工作操作规程(试行)》的通知
  14. 人工智能时代大数据分析面临的最大挑战!
  15. 高性能mysql学习笔记--索引
  16. 周边pd是什么意思_在韩国,PD是什么意思啊?
  17. JVM与垃圾回收笔记
  18. Python 3.0中ACCESS学习(三) 打开记录集并输出数据
  19. Cassandra简介
  20. 企业文档服务器,企业如何进行文档的规范管理

热门文章

  1. 如何通过request对象获取用户IP地址
  2. SwiftUI 代码速查之 06 设置SwiftUI backgroundColor的方法与foregroundColor相同
  3. 数学励志公式-给自己一个小目标,每天进步就1%!
  4. php 表情怎么存储位置,php保存emoji表情
  5. zz美国最新最时尚的英语词汇so hot!
  6. dnf过年服务器维护否,DNF1月17日服务器维护到什么时候_几点能玩
  7. 过完春节,我最想见到的人是贾跃亭
  8. Echarts绘制水球图
  9. C:/WINDOWS/system32/drivers/etc/hosts 文件有什么作用
  10. 超分之Robust VSR with Learned Temporal Dynamics