day11

1 fragment入门
    ViewGroup特点    可以有自己的孩子
    
    [1]通过onCreateView 这个方法Fragment可以加载自己的布局
    [2]name属性指定的是一个我们自己定义的Fragment
    [3]直接在布局中声明即可

2 动态替换fragment
    [1]获取Fragment的管理者
  1. FragmentManager fragmentManager = getFragmentManager();
    [2]开启一个事务
  1. FragmentTransaction beginTransaction = fragmentManager.beginTransaction();

    [3]提交事务
  1. beginTransaction.commit();


  1. package com.phone.dyncFragment;
  2. import android.support.v7.app.ActionBarActivity;
  3. import android.app.Fragment;
  4. import android.app.FragmentManager;
  5. import android.app.FragmentTransaction;
  6. import android.os.Bundle;
  7. import android.view.Menu;
  8. import android.view.MenuItem;
  9. import android.view.WindowManager;
  10. public class MainActivity extends ActionBarActivity {
  11. @Override
  12. protected void onCreate(Bundle savedInstanceState) {
  13. super.onCreate(savedInstanceState);
  14. setContentView(R.layout.activity_main);
  15. //[1]获取手机的分辨率
  16. WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
  17. int width = wm.getDefaultDisplay().getWidth();
  18. int height = wm.getDefaultDisplay().getHeight();
  19. //[3]获取Fragment的管理者 通过上下文直接获取
  20. FragmentManager fragmentManager = getFragmentManager();
  21. //开启事务
  22. FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
  23. //[2]判断横竖屏
  24. if(height>width){
  25. //说明是竖屏 加载一个fragment
  26. //android.R.id.content代表当前手机窗体
  27. beginTransaction.replace(android.R.id.content, new Fragment1());
  28. }else{
  29. //说明是横屏 加载一个fragment
  30. beginTransaction.replace(android.R.id.content, new Fragment2());
  31. }
  32. //[4]最后一步 记得commit
  33. beginTransaction.commit();
  34. }
  35. }
  1. package com.phone.dyncFragment;
  2. import android.app.Fragment;
  3. import android.os.Bundle;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. public class Fragment1 extends Fragment {
  8. //显示fragment1自己要显示的内容
  9. @Override
  10. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  11. Bundle savedInstanceState) {
  12. View view = inflater.inflate(R.layout.fragmentitem, null);
  13. return view;
  14. }
  15. }
  1. package com.phone.dyncFragment;
  2. import android.app.Fragment;
  3. import android.os.Bundle;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. public class Fragment2 extends Fragment {
  8. //显示fragment1自己要显示的内容
  9. @Override
  10. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  11. Bundle savedInstanceState) {
  12. View view = inflater.inflate(R.layout.fragmentitem1, null);
  13. return view;
  14. }
  15. }

3使用fragment创建一个选项卡页面
  1. package com.phone.weixin;
  2. import android.support.v7.app.ActionBarActivity;
  3. import android.app.FragmentManager;
  4. import android.app.FragmentTransaction;
  5. import android.os.Bundle;
  6. import android.view.Menu;
  7. import android.view.MenuItem;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.Button;
  11. public class MainActivity extends ActionBarActivity implements OnClickListener {
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. // [1]找到按钮
  17. Button btn_wx = (Button) findViewById(R.id.btn_wx);
  18. Button btn_contact = (Button) findViewById(R.id.btn_contact);
  19. Button btn_discover = (Button) findViewById(R.id.btn_discover);
  20. Button btn_me = (Button) findViewById(R.id.btn_me);
  21. // [2]设置点击事件
  22. btn_wx.setOnClickListener(this);
  23. btn_contact.setOnClickListener(this);
  24. btn_discover.setOnClickListener(this);
  25. btn_me.setOnClickListener(this);
  26. }
  27. @Override
  28. public void onClick(View v) {
  29. // [4]获取Fragment的管理者
  30. FragmentManager fragmentManager = getFragmentManager();
  31. FragmentTransaction beginTransaction = fragmentManager
  32. .beginTransaction();
  33. // [3]具体判断点击的是哪个按钮
  34. switch (v.getId()) {
  35. case R.id.btn_wx:// 点击的是微信
  36. beginTransaction.replace(R.id.ll_layout, new WxFragment());
  37. break;
  38. case R.id.btn_contact:// 点击的是通讯录
  39. beginTransaction.replace(R.id.ll_layout, new ContactFragment());
  40. break;
  41. case R.id.btn_discover:// 点击的是发现
  42. beginTransaction.replace(R.id.ll_layout, new DiscoverFragment());
  43. break;
  44. case R.id.btn_me:// 点击的是我的
  45. beginTransaction.replace(R.id.ll_layout, new MeFragment());
  46. break;
  47. }
  48. //[5]提交
  49. beginTransaction.commit();
  50. }
  51. }

4使用fragment兼容低版本的写法
    [1]fragment是在11版本的时候引入的
    [2]兼容低版本的写法就是所有的Fragment全部使用V4包中的fragment


5fragment的生命周期
 实际开发中必须要重写一个方法onCreateView方法
    还可以重写onDestroy方法进行一些回收内存的一些操作

6fragment之间的通信——公共的桥梁:activity
  1. package com.phone.wechatfragment;
  2. import android.app.FragmentManager;
  3. import android.app.FragmentTransaction;
  4. import android.os.Bundle;
  5. import android.support.v7.app.ActionBarActivity;
  6. public class MainActivity extends ActionBarActivity {
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.activity_main);
  11. //[1]获取fragment管理者
  12. FragmentManager fragmentManager = getFragmentManager();
  13. //[2]开启一个事务
  14. FragmentTransaction beginTransaction = fragmentManager.beginTransaction();
  15. //替换fragment
  16. beginTransaction.replace(R.id.ll1, new FragmentFragment(),"f1");
  17. beginTransaction.replace(R.id.ll2, new Fragment1Fragment(),"f2");
  18. //[3]提交
  19. beginTransaction.commit();
  20. }
  21. }
  1. package com.phone.wechatfragment;
  2. import android.app.Fragment;
  3. import android.os.Bundle;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.view.ViewGroup;
  8. import android.widget.Button;
  9. //定义Fragment 理解为 是Activity的一部分
  10. public class FragmentFragment extends Fragment {
  11. //当系统第一次画UI的时候调用 通过这个方法可以让Fragment显示自己的布局内容
  12. @Override
  13. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  14. Bundle savedInstanceState) {
  15. //通过打气筒把一个布局转换成一个View对象
  16. View view = inflater.inflate(R.layout.fragmentitem, null);
  17. //[1]找到按钮 设置点击事件
  18. Button btn_update = (Button) view.findViewById(R.id.btn_update);
  19. btn_update.setOnClickListener(new OnClickListener() {
  20. @Override
  21. public void onClick(View v) {
  22. //[2]修改fragment1里面的内容 通过fragment的公共桥梁---->activity
  23. Fragment1Fragment fragment = (Fragment1Fragment) getActivity().getFragmentManager().findFragmentByTag("f2");
  24. fragment.updateText("hahah");
  25. }
  26. });
  27. return view;
  28. }
  29. }
  1. package com.phone.wechatfragment;
  2. import android.app.Fragment;
  3. import android.os.Bundle;
  4. import android.view.LayoutInflater;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.TextView;
  8. //定义Fragment 理解为 是Activity的一部分
  9. public class Fragment1Fragment extends Fragment {
  10. private TextView tv_content;
  11. // 当系统第一次画UI的时候调用 通过这个方法可以让Fragment显示自己的布局内容
  12. @Override
  13. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  14. Bundle savedInstanceState) {
  15. // 通过打气筒把一个布局转换成一个View对象
  16. View view = inflater.inflate(R.layout.fragmentitem1, null);
  17. tv_content = (TextView) view.findViewById(R.id.tv_content);
  18. return view;
  19. }
  20. public void updateText(String content) {
  21. tv_content.setText(content);
  22. }
  23. }

7menu菜单
    [1]声明菜单
  1. //添加菜单的第一种方式
  2. //getMenuInflater().inflate(R.menu.main, menu);

    [2]动态去添加菜单
  1. //添加菜单的第二种方式
  2. menu.add(0, 1, 0, "前进");
  3. menu.add(0, 2, 0, "后退");
  4. menu.add(0, 3, 0, "首页");
    [3]弹出一个弹画框
    
  1. / 当菜单打开之前调用这个方法
  2. @Override
  3. public boolean onMenuOpened(int featureId, Menu menu) {
  4. // 弹出一个对话框
  5. AlertDialog.Builder builder = new Builder(this);
  6. builder.setTitle("警告");
  7. builder.setPositiveButton("确定", new OnClickListener() {
  8. @Override
  9. public void onClick(DialogInterface dialog, int which) {
  10. }
  11. });
  12. builder.setPositiveButton("取消", new OnClickListener() {
  13. @Override
  14. public void onClick(DialogInterface dialog, int which) {
  15. }
  16. });
  17. //最后一步 记得show出来和toast一样
  18. builder.show();
  19. return false;
  20. }
案例:
  1. package com.phone.menu;
  2. import android.app.AlertDialog;
  3. import android.app.AlertDialog.Builder;
  4. import android.content.DialogInterface;
  5. import android.content.Intent;
  6. import android.content.DialogInterface.OnClickListener;
  7. import android.os.Bundle;
  8. import android.support.v7.app.ActionBarActivity;
  9. import android.view.Menu;
  10. import android.view.MenuItem;
  11. public class MainActivity extends ActionBarActivity {
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. Intent intent = new Intent(this, TestActivity.class);
  17. startActivity(intent);
  18. }
  19. @Override
  20. public boolean onCreateOptionsMenu(Menu menu) {
  21. // 添加菜单的第一种方式
  22. // getMenuInflater().inflate(R.menu.main, menu);
  23. // 添加菜单的第二种方式
  24. menu.add(0, 1, 0, "前进");
  25. menu.add(0, 2, 0, "后退");
  26. menu.add(0, 3, 0, "首页");
  27. return true;
  28. }
  29. // 当我们想知道具体点击的是哪个菜单条目 重写下面这个方法(固定流程)
  30. @Override
  31. public boolean onOptionsItemSelected(MenuItem item) {
  32. // 具体点击的是哪个菜单条目
  33. switch (item.getItemId()) {
  34. case 1:
  35. System.out.println("前进");
  36. break;
  37. case 2:
  38. System.out.println("后退");
  39. break;
  40. case 3:
  41. System.out.println("首页");
  42. break;
  43. }
  44. return true;
  45. }
  46. @Override
  47. public void onBackPressed() {
  48. // TODO Auto-generated method stub
  49. super.onBackPressed();
  50. }
  51. // 当菜单打开之前调用这个方法
  52. @Override
  53. public boolean onMenuOpened(int featureId, Menu menu) {
  54. // 弹出一个对话框
  55. AlertDialog.Builder builder = new Builder(this);
  56. builder.setTitle("警告");
  57. builder.setPositiveButton("确定", new OnClickListener() {
  58. @Override
  59. public void onClick(DialogInterface dialog, int which) {
  60. }
  61. });
  62. builder.setPositiveButton("取消", new OnClickListener() {
  63. @Override
  64. public void onClick(DialogInterface dialog, int which) {
  65. }
  66. });
  67. //最后一步 记得show出来和toast一样
  68. builder.show();
  69. return false;
  70. }
  71. }

8AutoCompleteTextView控件的使用
    显示数据的原理与listview一样    也需要数据适配器
  1. package com.phone.autocompletetextview;
  2. import android.support.v7.app.ActionBarActivity;
  3. import android.R.string;
  4. import android.os.Bundle;
  5. import android.view.Menu;
  6. import android.view.MenuItem;
  7. import android.view.View;
  8. import android.widget.ArrayAdapter;
  9. import android.widget.AutoCompleteTextView;
  10. public class MainActivity extends ActionBarActivity {
  11. //模拟数据
  12. private String[] COUNTRIES = new String[]{
  13. "laofang","laoli","zhang","bi","laowang","la","cb","c"
  14. };
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.activity_main);
  19. //[1]找到控件
  20. AutoCompleteTextView actv = (AutoCompleteTextView) findViewById(R.id.actv);
  21. //[2]actv这个控件显示数据的原理和listview一样 需要一个数据适配器
  22. ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, COUNTRIES);
  23. //[3]显示数据
  24. actv.setAdapter(adapter);
  25. }
  26. }


9补间动画
    view动画
    [1]透明    AlphaAnimation
    [2]旋转    rotateAnimation
    [3]缩放    ScaleAnimation
    [4]位移    translateAnimation
    原理:动画效果不会改变控件真实的坐标
  1. package com.phone.Animation;
  2. import android.os.Bundle;
  3. import android.support.v7.app.ActionBarActivity;
  4. import android.view.View;
  5. import android.view.View.OnClickListener;
  6. import android.view.animation.AlphaAnimation;
  7. import android.view.animation.Animation;
  8. import android.view.animation.AnimationSet;
  9. import android.view.animation.RotateAnimation;
  10. import android.view.animation.ScaleAnimation;
  11. import android.view.animation.TranslateAnimation;
  12. import android.widget.ImageView;
  13. import android.widget.Toast;
  14. public class MainActivity extends ActionBarActivity {
  15. private ImageView iv;
  16. @Override
  17. protected void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.activity_main);
  20. iv = (ImageView) findViewById(R.id.iv);
  21. iv.setOnClickListener(new OnClickListener() {
  22. @Override
  23. public void onClick(View v) {
  24. Toast.makeText(getApplicationContext(), "你点不到我", 1).show();
  25. }
  26. });
  27. }
  28. // 点击按钮 实现透明效果
  29. public void click1(View v) {
  30. // 创建透明动画
  31. // 1.0意味着完全不透明
  32. // 0.0意味着完全透明
  33. AlphaAnimation aa = new AlphaAnimation(1.0f, 0.0f);
  34. // 设置动画执行的时间
  35. aa.setDuration(2000);
  36. // 设置动画重复的次数
  37. aa.setRepeatCount(1);
  38. // 设置动画重复的模式
  39. aa.setRepeatMode(AlphaAnimation.REVERSE);
  40. // 开始执行动画
  41. iv.startAnimation(aa);
  42. }
  43. // 点击按钮 实现旋转效果
  44. public void click2(View v) {
  45. // fromDegrees 开始角度
  46. // toDegrees 结束角度
  47. // RotateAnimation ra = new RotateAnimation(0, 360);
  48. RotateAnimation ra = new RotateAnimation(0, 360,
  49. Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
  50. 0.5f);
  51. // 设置动画执行的时间
  52. ra.setDuration(2000);
  53. // 设置动画重复的次数
  54. ra.setRepeatCount(1);
  55. // 设置动画重复的模式
  56. ra.setRepeatMode(AlphaAnimation.REVERSE);
  57. // 开始执行动画
  58. iv.startAnimation(ra);
  59. }
  60. // 点击按钮 实现缩放效果
  61. public void click3(View v) {
  62. ScaleAnimation sa = new ScaleAnimation(1.0f, 2.0f, 1.0f, 2.0f,
  63. Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
  64. 0.5f);
  65. // 设置动画执行的时间
  66. sa.setDuration(2000);
  67. // 设置动画重复的次数
  68. sa.setRepeatCount(1);
  69. // 设置动画重复的模式
  70. sa.setRepeatMode(AlphaAnimation.REVERSE);
  71. // 开始执行动画
  72. iv.startAnimation(sa);
  73. }
  74. // 点击按钮 实现位移效果
  75. public void click4(View v) {
  76. TranslateAnimation ta = new TranslateAnimation(
  77. Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,
  78. 0, Animation.RELATIVE_TO_PARENT, 0,
  79. Animation.RELATIVE_TO_PARENT, 0.2f);
  80. // 设置动画执行的时间
  81. ta.setDuration(2000);
  82. //当动画结束后,停留在结束的位置
  83. ta.setFillAfter(true);
  84. // 开始执行动画
  85. iv.startAnimation(ta);
  86. }
  87. // 点击按钮 实现让动画一起执行
  88. public void click5(View v) {
  89. //创建动画的合集
  90. AnimationSet set = new AnimationSet(true);
  91. // 创建透明动画
  92. // 1.0意味着完全不透明
  93. // 0.0意味着完全透明
  94. AlphaAnimation aa = new AlphaAnimation(1.0f, 0.0f);
  95. // 设置动画执行的时间
  96. aa.setDuration(2000);
  97. // 设置动画重复的次数
  98. aa.setRepeatCount(1);
  99. // 设置动画重复的模式
  100. aa.setRepeatMode(AlphaAnimation.REVERSE);
  101. // fromDegrees 开始角度
  102. // toDegrees 结束角度
  103. // RotateAnimation ra = new RotateAnimation(0, 360);
  104. RotateAnimation ra = new RotateAnimation(0, 360,
  105. Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
  106. 0.5f);
  107. // 设置动画执行的时间
  108. ra.setDuration(2000);
  109. // 设置动画重复的次数
  110. ra.setRepeatCount(1);
  111. // 设置动画重复的模式
  112. ra.setRepeatMode(AlphaAnimation.REVERSE);
  113. ScaleAnimation sa = new ScaleAnimation(1.0f, 2.0f, 1.0f, 2.0f,
  114. Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
  115. 0.5f);
  116. // 设置动画执行的时间
  117. sa.setDuration(2000);
  118. // 设置动画重复的次数
  119. sa.setRepeatCount(1);
  120. // 设置动画重复的模式
  121. sa.setRepeatMode(AlphaAnimation.REVERSE);
  122. TranslateAnimation ta = new TranslateAnimation(
  123. Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,
  124. 0, Animation.RELATIVE_TO_PARENT, 0,
  125. Animation.RELATIVE_TO_PARENT, 0.2f);
  126. // 设置动画执行的时间
  127. ta.setDuration(2000);
  128. //当动画结束后,停留在结束的位置
  129. ta.setFillAfter(true);
  130. //添加动画
  131. set.addAnimation(ra);
  132. set.addAnimation(ta);
  133. set.addAnimation(sa);
  134. set.addAnimation(aa);
  135. // 开始执行动画
  136. iv.startAnimation(set);
  137. }
  138. }


10应用程序的反编译
    apktools    可以获取res下资源文件
    dex2jar      可以把apk转换成jar
    jd-gui.exe        可以把jar转换成源码

11使用xml方式定义补间动画
    [1]就是在res下创建一个目录(anim)
    [2]在该目录下创建对应的动画即可
  1. package com.phone.Animationxml;
  2. import android.os.Bundle;
  3. import android.support.v7.app.ActionBarActivity;
  4. import android.view.View;
  5. import android.view.View.OnClickListener;
  6. import android.view.animation.AlphaAnimation;
  7. import android.view.animation.Animation;
  8. import android.view.animation.AnimationSet;
  9. import android.view.animation.AnimationUtils;
  10. import android.view.animation.RotateAnimation;
  11. import android.view.animation.ScaleAnimation;
  12. import android.view.animation.TranslateAnimation;
  13. import android.widget.ImageView;
  14. import android.widget.Toast;
  15. import com.phone.Animationxml.R;
  16. public class MainActivity extends ActionBarActivity {
  17. private ImageView iv;
  18. @Override
  19. protected void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.activity_main);
  22. iv = (ImageView) findViewById(R.id.iv);
  23. iv.setOnClickListener(new OnClickListener() {
  24. @Override
  25. public void onClick(View v) {
  26. Toast.makeText(getApplicationContext(), "你点不到我", 1).show();
  27. }
  28. });
  29. }
  30. // 点击按钮 实现透明效果
  31. public void click1(View v) {
  32. // 创建透明动画
  33. Animation aa = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.alpha);
  34. // 开始执行动画
  35. iv.startAnimation(aa);
  36. }
  37. // 点击按钮 实现旋转效果
  38. public void click2(View v) {
  39. Animation ra = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.rotate);
  40. // 开始执行动画
  41. iv.startAnimation(ra);
  42. }
  43. // 点击按钮 实现缩放效果
  44. public void click3(View v) {
  45. Animation sa = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.scale);
  46. // 开始执行动画
  47. iv.startAnimation(sa);
  48. }
  49. // 点击按钮 实现位移效果
  50. public void click4(View v) {
  51. Animation ta = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.translate);
  52. // 开始执行动画
  53. iv.startAnimation(ta);
  54. }
  55. // 点击按钮 实现让动画一起执行
  56. public void click5(View v) {
  57. Animation set = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.set);
  58. // 开始执行动画
  59. iv.startAnimation(set);
  60. }
  61. }


12属性动画
    原理:会改变控件的真实的坐标
    ObjectAnimator   它不是new出来的,通过静态方法
  1. package com.phone.Animation1;
  2. import android.animation.Animator;
  3. import android.animation.AnimatorInflater;
  4. import android.animation.AnimatorSet;
  5. import android.animation.ObjectAnimator;
  6. import android.os.Bundle;
  7. import android.app.Activity;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.ImageView;
  11. import android.widget.Toast;
  12. import com.phone.Animationattr.R;
  13. public class MainActivity extends Activity {
  14. private ImageView iv;
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.activity_main);
  19. iv = (ImageView) findViewById(R.id.iv);
  20. iv.setOnClickListener(new OnClickListener() {
  21. @Override
  22. public void onClick(View v) {
  23. Toast.makeText(getApplicationContext(), "你点不到我", 1).show();
  24. }
  25. });
  26. }
  27. // 点击按钮 实现透明效果
  28. public void click1(View v) {
  29. ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "alpha", 0, 0.5f, 0, 1,
  30. 0, 1);
  31. oa.setDuration(2000);
  32. oa.start();
  33. }
  34. // 点击按钮 实现旋转效果
  35. public void click2(View v) {
  36. ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "rotation", 0, 180, 90,
  37. 360);
  38. oa.setDuration(2000);
  39. oa.start();
  40. }
  41. // 点击按钮 实现缩放效果
  42. public void click3(View v) {
  43. ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "scaleY", 0.1f, 2, 1, 2);
  44. oa.setDuration(2000);
  45. oa.start();
  46. }
  47. // 点击按钮 实现位移效果
  48. public void click4(View v) {
  49. // 创建属性动画
  50. /**
  51. * target 执行的目标 谁执行动画 propertyName 属性名字 values 可变参数
  52. */
  53. ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "translationX", 10, 50,
  54. 20, 100);
  55. oa.setDuration(2000);
  56. oa.start();
  57. }
  58. // 点击按钮 实现让动画一起执行
  59. public void click5(View v) {
  60. AnimatorSet as = new AnimatorSet();
  61. ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "alpha", 0, 0.5f, 0, 1,
  62. 0, 1);
  63. ObjectAnimator oa2 = ObjectAnimator.ofFloat(iv, "rotation", 0, 180, 90,
  64. 360);
  65. ObjectAnimator oa3 = ObjectAnimator
  66. .ofFloat(iv, "scaleY", 0.1f, 2, 1, 2);
  67. ObjectAnimator oa4 = ObjectAnimator.ofFloat(iv, "translationX", 10, 50,
  68. 20, 100);
  69. as.setDuration(2000);
  70. as.setTarget(iv);
  71. // 往集合中添加动画
  72. // 挨个飞
  73. as.playSequentially(oa, oa2, oa3, oa4);
  74. // 一起飞
  75. // as.playTogether(oa,oa2,oa3,oa4);
  76. as.start();
  77. }
  78. // 点击按钮 实现让动画一起执行xml
  79. public void click6(View v) {
  80. ObjectAnimator oa = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.oanimator);
  81. //设置执行目标
  82. oa.setTarget(iv);
  83. //开始执行
  84. oa.start();
  85. }
  86. }
在res下创建一个目录(animator)
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <animator xmlns:android="http://schemas.android.com/apk/res/android" >
  3. <objectAnimator
  4. android:duration="2000"
  5. android:propertyName="translationX"
  6. android:valueFrom="10"
  7. android:valueTo="100" >
  8. </objectAnimator>
  9. </animator>


13通知栏的介绍
   [1]Toast
   [2]对话框
   [3]通知栏


smsmanager    发送短信
fragmentManager    fragment的管理者
TelephoneManager    电话的管理者
WindowManager    窗口的管理者
NotificationManager      通知的管理者

  1. package com.phone.notifation;
  2. import android.app.Notification;
  3. import android.app.NotificationManager;
  4. import android.app.PendingIntent;
  5. import android.content.Intent;
  6. import android.net.Uri;
  7. import android.os.Bundle;
  8. import android.support.v7.app.ActionBarActivity;
  9. import android.view.View;
  10. public class MainActivity extends ActionBarActivity {
  11. private NotificationManager nm;
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.activity_main);
  16. //[1]获取NotificationManager的实例
  17. nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
  18. }
  19. //点击按钮发送一条通知
  20. public void click1(View v){
  21. //链式调用
  22. // Notification noti = new Notification.Builder(this)
  23. // .setContentTitle("我是大标题")
  24. // .setContentText("我是标题的内容")
  25. // .setSmallIcon(R.drawable.ic_launcher)
  26. // .setLargeIcon(BitmapFactory.decodeResource(getResources(),
  27. // R.drawable.ic_launcher))
  28. // .build();
  29. //兼容低版本 使用过时的方法
  30. Notification notification = new Notification(R.drawable.ic_launcher, "我接收到了一条通知", System.currentTimeMillis());
  31. //来一条通知 设置一下震动 让呼吸灯亮
  32. notification.defaults = Notification.DEFAULT_ALL;
  33. //设置通知不让清除
  34. notification.flags = Notification.FLAG_NO_CLEAR;
  35. //创建意图对象
  36. Intent intent = new Intent();
  37. //实现拨打电话的功能
  38. intent.setAction(Intent.ACTION_CALL);
  39. intent.setData(Uri.parse("tel:"+119));
  40. PendingIntent ontentIntent = PendingIntent.getActivity(this, 1, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
  41. //点击通知对应的业务逻辑
  42. notification.setLatestEventInfo(this, "小芳", "老地方见", ontentIntent);
  43. //发出通知
  44. nm.notify(10, notification);
  45. }
  46. //点击按钮 取消发送一条通知
  47. public void click2(View v){
  48. //取消通知
  49. nm.cancel(10);
  50. }
  51. }

14通知和服务连用
    可以提升进程的优先级
  1. startForeground(id, notification);





原文地址:https://www.cnblogs.com/phonecom/p/e64b956e4ef6f77663c2703be5a60dfa.html