zoukankan      html  css  js  c++  java
  • 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);





  • 相关阅读:
    SQL Server高可用性(High Availability)——Database Replication
    sql server中意向锁的作用
    面试题36:数组中的逆序对
    SQL Server高可用性(High Availability)——Log Shipping
    SQL Server Join方式
    Enabling the Dedicated Administrator Connection (DAC) in SQL Server Express
    执行计划重编译的时机
    SQL Server高可用性(High Availability)——Failover Clustering
    面试题34:丑数
    sql server 性能分析工具
  • 原文地址:https://www.cnblogs.com/phonecom/p/e64b956e4ef6f77663c2703be5a60dfa.html
Copyright © 2011-2022 走看看