乐乐音乐播放器(三) 第一次引导页面

源码地址: 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. * @author zhangliangming

  9. */
  10. public class DataUtil {
  11.         private static SharedPreferences preferences;

  12.         /**
  13.          * 初始化,将所有配置文件里的数据赋值给Constants
  14.          * 
  15.          * @param context
  16.          */
  17.         public static void init(Context context) {
  18.                 if (preferences == null) {
  19.                         preferences = context.getSharedPreferences(
  20.                                         Constants.PREFERENCE_NAME, 0);
  21.                 }
  22.         }

  23.         /**
  24.          * 保存数据到SharedPreferences配置文件
  25.          * 
  26.          * @param context
  27.          * @param key
  28.          *            关键字
  29.          * @param data
  30.          *            要保存的数据
  31.          */
  32.         public static void saveValue(Context context, String key, Object data) {
  33.                 if (preferences == null) {
  34.                         preferences = context.getSharedPreferences(
  35.                                         Constants.PREFERENCE_NAME, 0);
  36.                 }
  37.                 Editor editor = preferences.edit();
  38.                 if (data instanceof Boolean) {
  39.                         editor.putBoolean(key, (Boolean) data);
  40.                 } else if (data instanceof Integer) {
  41.                         editor.putInt(key, (Integer) data);
  42.                 } else if (data instanceof String) {
  43.                         editor.putString(key, (String) data);
  44.                 } else if (data instanceof Float) {
  45.                         editor.putFloat(key, (Float) data);
  46.                 } else if (data instanceof Long) {
  47.                         editor.putFloat(key, (Long) data);
  48.                 }

  49.                 // 提交修改
  50.                 editor.commit();
  51.         }

  52.         /**
  53.          * 从SharedPreferences配置文件中获取数据
  54.          * 
  55.          * @param context
  56.          * @param key
  57.          *            关键字
  58.          * @param defData
  59.          *            默认获取的数据
  60.          * @return
  61.          */
  62.         public static Object getValue(Context context, String key, Object defData) {
  63.                 if (preferences == null) {
  64.                         preferences = context.getSharedPreferences(
  65.                                         Constants.PREFERENCE_NAME, 0);
  66.                 }

  67.                 if (defData instanceof Boolean) {
  68.                         return preferences.getBoolean(key, (Boolean) defData);
  69.                 } else if (defData instanceof Integer) {
  70.                         return preferences.getInt(key, (Integer) defData);
  71.                 } else if (defData instanceof String) {
  72.                         return preferences.getString(key, (String) defData);
  73.                 } else if (defData instanceof Float) {
  74.                         return preferences.getFloat(key, (Float) defData);
  75.                 } else if (defData instanceof Long) {
  76.                         return preferences.getLong(key, (Long) defData);
  77.                 }

  78.                 return null;

  79.         }
  80. }
复制代码
修改 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. * @author Administrator 最近修改时间2013年12月10日
  8. */
  9. public class ActivityManage {

  10.         /**
  11.          * activity列表
  12.          */
  13.         private List<Activity> activityList = new LinkedList<Activity>();
  14.         private static ActivityManage instance = null;

  15.         private ActivityManage() {

  16.         }

  17.         public static ActivityManage getInstance() {
  18.                 if (instance == null) {
  19.                         instance = new ActivityManage();
  20.                 }
  21.                 return instance;
  22.         }

  23.         /**
  24.          * 添加
  25.          * 
  26.          * @param activity
  27.          */
  28.         public void addActivity(Activity activity) {
  29.                 activityList.add(activity);
  30.         }

  31.         /**
  32.          * 退出
  33.          */
  34.         public void exit() {
  35.                 for (Activity activity : activityList) {
  36.                         if (!activity.isFinishing() && activity != null) {
  37.                                 activity.finish();
  38.                         }
  39.                 }
  40.                 int id = android.os.Process.myPid();
  41.                 if (id != 0) {
  42.                         android.os.Process.killProcess(id);
  43.                 }
  44.         }
  45. }
复制代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值