A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小鲁哥哥 于 2020-1-8 22:01 编辑

【济南中心】Android课程同步笔记day11:Android应用开发基础

Fragment:
* 从Android 3.0 (API level 11)开始引入Fragment的。
* Fragment包含在Activity中,Fragment只能存在于Activity的上下文(context)内,没有Activity就无法使用Fragment,因此Fragment只能在Activity的上下文(context)创建。Fragment可以作为Activity的一部分,Fragment和Activity非常相似,Fragment拥有一个与Activity相关的视图层次结构,拥有一个与Activity非常相似的生命周期。

为什么要使用Fragment:
Activity的使用局限:不能将多个Activity界面放在屏幕上一并显示。因此创建了Fragment来弥补Activity的局限。Fragment可以像Activity一样响应Back键等类似Activity的功能。

创建Fragment:
[Java] 纯文本查看 复制代码
        public class SoundFragment extends Fragment {
                //返回当前fragment显示的内容
                @Override
                public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                Bundle savedInstanceState) {
                        return inflater.inflate(R.layout.sound, null);
                }
        }

展示一个Fragment到界面上:
[Java] 纯文本查看 复制代码
        public void showSound(View view){
                //创建Fragment
                SoundFragment fragment = new SoundFragment();
                //获取Fragment管理器
                   FragmentManager fm = getFragmentManager();
                   //开启事务
                   FragmentTransaction ft =  fm.beginTransaction();
                //将界面上的一块布局替换为Fragment
                   ft.replace(R.id.container, fragment);
                //提交事物
                   ft.commit();
        }

Fragment事物的特点:
fm.beginTransaction()和ft.commit()要配对使用。

Fragment和Activity的通信:
1. Fragment获取Activity中的数据
        //通过getActivity()获取到所在Activity的引用,然后就可以拿到Activity里面的内容了
        EditText et_name = (EditText) getActivity().findViewById(R.id.et_name);
        Toast.makeText(getActivity(), "name:"+et_name.getText().toString(), 0).show();
2. Activity中获取Fragment中的数据
    * Activity在创建Fragment时可以得到他的引用,利用引用就可以获取里面的内容
    * 创建Fragment时还可以使用replace的另一个方法,给Fragment设置一个tag,以后可以通过tag再次获取这个Fragment
            fragmentTransaction.replace(int containerViewId, Fragment fragment, String tag);
            fragmentManager.findFragmentByTag(String tag);

Fragment的生命周期:
与Activity类似,在onCreateView()方法返回该Fragment的View。
Fragment生命周期与Activity声明周期对照图:
在兼容低版本的开发中如何使用Fragment:
1. Activity要继承FragmentActivity
2. 使用getSupportFragmentManager()方法拿到FragmentManager
3. 使用android.support.v4.app.Fragment下的Fragment

View动画:
1. 透明度渐变动画
[Java] 纯文本查看 复制代码
                AlphaAnimation aa = new AlphaAnimation(0.0f, 1.0f);
                //动画播放的时间长度
                aa.setDuration(2000);
                //设置重复播放的次数
                aa.setRepeatCount(Animation.INFINITE);
                //设置重复播放的模式
                aa.setRepeatMode(Animation.REVERSE);
                //让iv播放aa动画
                iv.startAnimation(aa);

2. 平移动画
[Java] 纯文本查看 复制代码
                //Animation.RELATIVE_TO_SELF         相对于自己,值要填百分比
                //Animation.RELATIVE_TO_PARENT         相对于父控件,值要填百分比
                //Animation.ABSOLUTE                         绝对坐标,值要填具体值
                TranslateAnimation ta = new TranslateAnimation(
                                Animation.RELATIVE_TO_SELF, //起始x类型
                                0,                                                         //起始x值
                                Animation.RELATIVE_TO_SELF,        //结束x类型
                                1f,                                                        //结束x值
                                Animation.RELATIVE_TO_SELF,        //起始y类型
                                0,                                                        //起始y值
                                Animation.RELATIVE_TO_SELF,        //结束y类型
                                1f);                                                //结束y值
                //动画播放的时间长度
                ta.setDuration(2000);
                //设置重复播放的次数
                ta.setRepeatCount(Animation.INFINITE);
                //设置重复播放的模式
                ta.setRepeatMode(Animation.REVERSE);
                //让iv播放aa动画
                iv.startAnimation(ta);

3. 缩放动画
[Java] 纯文本查看 复制代码
                ScaleAnimation sa = new ScaleAnimation(
                                0.2f,                                                 //x轴起始缩放比
                                2.0f,                                                 //x轴结束缩放比
                                0.2f,                                                 //y轴起始缩放比
                                2.0f,                                                //y轴结束缩放比
                                Animation.RELATIVE_TO_SELF, //中心点x类型
                                0.5f,                                                 //中心点x值
                                Animation.RELATIVE_TO_SELF, //中心点y类型
                                0.5f                                                //中心点y值
                                );
                //动画播放的时间长度
                sa.setDuration(2000);
                //设置重复播放的次数
                sa.setRepeatCount(Animation.INFINITE);
                //设置重复播放的模式
                sa.setRepeatMode(Animation.REVERSE);
                //让iv播放aa动画
                iv.startAnimation(sa);

4. 旋转动画
[Java] 纯文本查看 复制代码
                RotateAnimation ra = new RotateAnimation(
                                0, 
                                360, 
                                Animation.RELATIVE_TO_SELF, 
                                0.5f, 
                                Animation.RELATIVE_TO_SELF, 
                                0.5f);
                //动画播放的时间长度
                ra.setDuration(2000);
                //设置重复播放的次数
                ra.setRepeatCount(Animation.INFINITE);
                //设置重复播放的模式
                ra.setRepeatMode(Animation.REVERSE);
                //让iv播放aa动画
                iv.startAnimation(ra);

组合动画的使用方式:
    AnimationSet set = new AnimationSet(false);
    ...
    set.addAnimation(ta);
    set.addAnimation(sa);
    set.addAnimation(ra);
    iv.startAnimation(set);

使用xml文件描述动画:
xml文件放在res/anim文件夹下:
[XML] 纯文本查看 复制代码
        <?xml version="1.0" encoding="utf-8"?>
        <alpha xmlns:android="http://schemas.android.com/apk/res/android"
            android:fromAlpha="0.0"
            android:toAlpha="1.0"
            android:duration="2000"
            android:repeatCount="infinite"
            android:repeatMode="reverse" >
        </alpha>
使用方式
    Animation aa = AnimationUtils.loadAnimation(this, R.anim.alpha_demo);
    iv.startAnimation(aa);
View动画的特点:
View的位置并没有真正的变化,只是改变了渲染的位置。

属性动画的使用方式:
[Java] 纯文本查看 复制代码
        ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "translationY", new float[]{0,2,4,6,8,10,15,20,25,30,50,80,100,150});
        oa.setDuration(2000);
        oa.setRepeatCount(ObjectAnimator.INFINITE);
        oa.setRepeatMode(ObjectAnimator.RESTART);
        oa.start();
属性动画的特点:View的位置真正的发生了变化。

属性动画差补器:
AccelerateDecelerateInterpolator 在动画开始与结束的地方速率改变比较慢,在中间的时候加速
  AccelerateInterpolator  在动画开始的地方速率改变比较慢,然后开始加速
  AnticipateInterpolator 开始的时候向后然后向前甩
  AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
  BounceInterpolator   动画结束的时候弹起
  CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
  DecelerateInterpolator 在动画开始的地方快然后慢
  LinearInterpolator   以常量速率改变
  OvershootInterpolator    向前甩一定值后再回到原来位置

属性动画集合的使用方式:
    AnimatorSet set = new AnimatorSet();
    //顺序播放
    set.playSequentially(oa,oa2);
    //同时播放
    set.playTogether(oa,oa2);

使用xml文件描述属性动画:
xml文件放在res/animator文件夹下
[XML] 纯文本查看 复制代码
        <?xml version="1.0" encoding="utf-8"?>
        <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" 
                android:propertyName="alpha"    
                android:duration="3000"
                android:repeatCount="3"
                android:repeatMode="reverse"
                android:valueFrom="0.0"
                android:valueTo="1.0" >
        </objectAnimator>

使用方式:
    Animator animator =    AnimatorInflater.loadAnimator(this, R.animator.alpha);
    animator.setTarget(iv);
    animator.start();





20 个回复

正序浏览

回帖奖励 +1 黑马币

多谢分享
回复 使用道具 举报

回帖奖励 +1 黑马币

谢谢分享!
回复 使用道具 举报

回帖奖励 +1 黑马币

感谢分享!!!
回复 使用道具 举报

回帖奖励 +1 黑马币

感谢分享!!!
回复 使用道具 举报
cheat 中级黑马 2017-7-10 22:51:03
16#

回帖奖励 +1 黑马币


可以的 感谢老师
回复 使用道具 举报

回帖奖励 +1 黑马币

这个是真的强,
感谢老师分享!
回复 使用道具 举报

回帖奖励 +1 黑马币

可以的 很强势
回复 使用道具 举报
dhj 中级黑马 2017-6-9 11:43:08
13#

回帖奖励 +1 黑马币

感谢分享,辛苦!!
回复 使用道具 举报

回帖奖励 +1 黑马币

谢谢分享!
回复 使用道具 举报

回帖奖励 +1 黑马币

感谢老师分享, 辛苦了
回复 使用道具 举报
wh121 中级黑马 2017-3-31 15:46:37
10#
进来学习一下
回复 使用道具 举报
wh121 中级黑马 2017-3-24 15:32:52
9#

回帖奖励 +1 黑马币

进来学习看看
回复 使用道具 举报

回帖奖励 +1 黑马币

谢谢分享!
回复 使用道具 举报

回帖奖励 +1 黑马币

好东西!谢谢分享!谢谢!!!
回复 使用道具 举报

回帖奖励 +1 黑马币

谢谢分享 赞赞赞!!!!!!
回复 使用道具 举报

回帖奖励 +1 黑马币

谢谢资料 支持
回复 使用道具 举报

回帖奖励 +1 黑马币

支持支持。顺别带走点黑马币
回复 使用道具 举报

回帖奖励 +1 黑马币

突然发现了好多有用的笔记,收下了老师
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报

回帖奖励 +1 黑马币

支持啊666
回复 使用道具 举报

回帖奖励 +1 黑马币

感谢老师分享!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马