美文网首页
十、Fragment和View

十、Fragment和View

作者: 浮生若梦OvO | 来源:发表于2019-06-20 22:01 被阅读0次

    一、Fagment入门

    // 1.得到碎片管理者
    FragmentManager manager = getFragmentManager();
    // 2.打开数据库事务
    FragmentTransaction tr = manager.beginTransaction();
    
    // 构建碎片的对象
    SaveFragment fragment = new SaveFragment();
    
    // 替换公共的空间,显示对应的碎片
    tr.replace(R.id.container, fragment);
    
    // 提交事务
    tr.commit();
    

    注:打开事物和提交事务必须是打开一次提交一次,来满足事物的特性。

    二、Fragment与Activity之间的通讯

    怎样拿到Activity中EditView输入框中的数据,并在Fragment中显示,代码如下:

    public class SoundFragment extends Fragment {
    
    //使用这个方法来显示该碎片到底展示什么UI布局,有一点类似activity里面的onCreate方法
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        //让当前碎片显示sound界面
        View view = inflater.inflate(R.layout.sound, null);
    
        view.findViewById(R.id.btn).setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                EditText et = (EditText) getActivity().findViewById(R.id.et);
                //getActivity() 这个方法就是获取到了fragment寄存在哪一个activity上面的对象。
                Toast.makeText(getActivity(), "按钮被点击了。。"+et.getText().toString(), 0).show();
    
            }
        });
        return view ;
    }
    

    三、fragment的生命周期

    与activity基本类似
    
    onCreate()-->onStart()-->onResume()-->onPause()-->onStop()-->onDestroy().
    
    一旦这个碎片被其他碎片替换显示了,那么原来的碎片将要被销毁。
    

    四、fragment向下兼容

    修改导包问题,android.app.x ----> android.support.v4.x
    
    activity要修改继承关系, activity-----fragmentActivity
    
    修改方法 FragmentManager manager = getSupportFragmentManager();
    

    五、View动画

    public class MainActivity extends Activity {
    ImageView iv;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        iv = (ImageView) findViewById(R.id.iv);
    }
    
    public void translate(View v) {
    
        // 定义平移动画
        /*
         * TranslateAnimation anim = new TranslateAnimation( 0, 100, 0, 100);
         */
    
        // Animation.ABSOLUTE 指的就是后面的x或者y的数值是什么类型----绝对值像素点
        // Animation.RELATIVE_TO_SELF 相对于自己的宽高多少倍,后面的数值指的是倍数
        // Animation.RELATIVE_TO_PARENT 屏幕的宽高倍数
    
        TranslateAnimation anim = new TranslateAnimation(
                Animation.RELATIVE_TO_PARENT, 0, Animation.RELATIVE_TO_PARENT,
                0.5f, Animation.RELATIVE_TO_PARENT, 0,
                Animation.RELATIVE_TO_PARENT, 0.5f);
    
        // 播放的次数
        anim.setRepeatCount(Animation.INFINITE);
        // 播放完毕之后,倒着播放
        anim.setRepeatMode(Animation.REVERSE);
        // 设置播放时间
        anim.setDuration(2000);
    
        // 让这个控件播放指定的动画
        iv.startAnimation(anim);
    
    }
    //旋转动画
    public void rotate(View v) {
    
        RotateAnimation anim = new RotateAnimation(0, 360,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
                0.5f);
    
        // 播放的次数
        anim.setRepeatCount(Animation.INFINITE);
        // 播放完毕之后,倒着播放
        anim.setRepeatMode(Animation.REVERSE);
        // 设置播放时间
        anim.setDuration(2000);
    
        // 让这个控件播放指定的动画
        iv.startAnimation(anim);
    }
    
    public void scale(View v) {
    
        // 如果后面的数字比前面大,那么代表的是放大,否则是缩小
        ScaleAnimation anim = new ScaleAnimation(3, 1, 3, 1,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
                0.5f);
    
        // 播放的次数
        anim.setRepeatCount(Animation.INFINITE);
        // 播放完毕之后,倒着播放
        anim.setRepeatMode(Animation.REVERSE);
        // 设置播放时间
        anim.setDuration(2000);
    
        // 让这个控件播放指定的动画
        iv.startAnimation(anim);
    
    }
    
    public void alpha(View v) {
        // 从半透明状态到不透明状态,注意: 0.0 - 1.0 区间
        AlphaAnimation anim = new AlphaAnimation(0.2f, 1.0f);
        // 播放的次数
        anim.setRepeatCount(Animation.INFINITE);
        // 播放完毕之后,倒着播放
        anim.setRepeatMode(Animation.REVERSE);
        // 设置播放时间
        anim.setDuration(4000);
    
        // 让这个控件播放指定的动画
        iv.startAnimation(anim);
    }
    
    public void set(View v) {
        // 这是动画的集合  true -- 集合中的子动画使用的将是集合的插入器Interpolator,
        //false -- 子动画自己使用 自己的插入器Interpolator
        AnimationSet set = new AnimationSet(false);
    
    
    
        TranslateAnimation anim = new TranslateAnimation(
                Animation.RELATIVE_TO_PARENT, 0, 
                Animation.RELATIVE_TO_PARENT,
                0.5f, 
                Animation.RELATIVE_TO_PARENT, 0,
                Animation.RELATIVE_TO_PARENT, 0.5f);
    
        // 播放的次数
        anim.setRepeatCount(Animation.INFINITE);
        // 播放完毕之后,倒着播放
        anim.setRepeatMode(Animation.REVERSE);
        // 设置播放时间
        anim.setDuration(2000);
    
    
        /*RotateAnimation ranim = new RotateAnimation(0, 360,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
                0.5f);
    
        // 播放的次数
        ranim.setRepeatCount(Animation.INFINITE);
        // 播放完毕之后,倒着播放
        ranim.setRepeatMode(Animation.REVERSE);
        // 设置播放时间
        ranim.setDuration(2000);*/
    
    
        AlphaAnimation aanim = new AlphaAnimation(0.2f, 1.0f);
        // 播放的次数
        aanim.setRepeatCount(Animation.INFINITE);
        // 播放完毕之后,倒着播放
        aanim.setRepeatMode(Animation.REVERSE);
        // 设置播放时间
        aanim.setDuration(2000);
    
        //把动画加入到集合中。
        set.addAnimation(anim);
        set.addAnimation(aanim);
    
        //让控件播放集合中的动画
        iv.startAnimation(set);
    
    
    
    }
    

    六、View动画在Xml中

    首先要在res下面创建anim文件夹,将创建的xml文件放在其中
    在xml文件中的代码:

    <?xml version="1.0" encoding="utf-8"?>
    <translate 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0"
    android:toXDelta="50%p"
    android:fromYDelta="0"
    android:toYDelta="50%p"
    android:duration="2000"
    android:repeatCount="infinite"
    android:repeatMode="reverse">
    
    <!-- 
        如果写的是数字代表的是绝对值的移动 
        百分比代表的是自己的倍数。
        百分比后面跟上p,代表的是移动父元素的倍数
    -->    
    </translate>
    
    在类中方的代码:
    
    public void translate(View v) {
    
        Animation anim= AnimationUtils.loadAnimation(this, R.anim.translate_demo);
        iv.startAnimation(anim);
    
    
    }
    注:view动画中的空间的位置并没有改变,只是图片在变化,他摆放在那里,就还在那个位置。
    

    七、属性动画

    public class MainActivity extends Activity {
    ImageView iv;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        iv = (ImageView) findViewById(R.id.iv);
    
    
        iv.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "红心被点击了。", 0).show();
            }
        });
    }
    
    public void translate(View v) {
    
        // 使用ObejctAnimator去创建属性动画
        // 参数一:让谁播放这个动画 - 让iv播放这个动画
        // 参数二:当前动画是什么类型,写上属性的名字即可。
        //参数三:移动的数值。可以是float数组或者直接是数字10,20,30...
        ObjectAnimator anim = ObjectAnimator.ofFloat(iv, "translationX", 10,20, 100);
        anim.setDuration(2000);
        anim.setRepeatCount(ObjectAnimator.INFINITE);
        anim.setRepeatMode(ObjectAnimator.REVERSE);
        // 让属性动画播放起来
        anim.start();
    
    
    
    }
    
    public void rotate(View v) {
        // 使用ObejctAnimator去创建属性动画
        // 参数一:让谁播放这个动画 - 让iv播放这个动画
        // 参数二:当前动画是什么类型,写上属性的名字即可。
        ObjectAnimator anim = ObjectAnimator.ofFloat(iv, "rotationY", 0, 360);
    
        anim.setDuration(2000);
        anim.setRepeatCount(ObjectAnimator.INFINITE);
        anim.setRepeatMode(ObjectAnimator.REVERSE);
        // 让属性动画播放起来
        anim.start();
    }
    
    public void scale(View v) {
        // 使用ObejctAnimator去创建属性动画
        // 参数一:让谁播放这个动画 - 让iv播放这个动画
        // 参数二:当前动画是什么类型,写上属性的名字即可。
        ObjectAnimator anim = ObjectAnimator.ofFloat(iv, "scaleY", 1, 3);
    
        anim.setDuration(2000);
        anim.setRepeatCount(ObjectAnimator.INFINITE);
        anim.setRepeatMode(ObjectAnimator.REVERSE);
        // 让属性动画播放起来
        anim.start();
    }
    
    public void alpha(View v) {
    
        // 使用ObejctAnimator去创建属性动画
        // 参数一:让谁播放这个动画 - 让iv播放这个动画
        // 参数二:当前动画是什么类型,写上属性的名字即可。
        ObjectAnimator anim = ObjectAnimator.ofFloat(iv, "alpha", 0.2f, 1);
    
        anim.setDuration(2000);
        anim.setRepeatCount(ObjectAnimator.INFINITE);
        anim.setRepeatMode(ObjectAnimator.REVERSE);
        // 让属性动画播放起来
        anim.start();
    }
    
    public void set(View v) {
        AnimatorSet set = new AnimatorSet();
    
    
        ObjectAnimator anim = ObjectAnimator.ofFloat(iv, "translationX", 10, 100);
    
        anim.setDuration(2000);
        /*anim.setRepeatCount(ObjectAnimator.INFINITE);
        anim.setRepeatMode(ObjectAnimator.REVERSE);*/
    
    
        ObjectAnimator anim2 = ObjectAnimator.ofFloat(iv, "translationY",10, 100);
    
        anim2.setDuration(2000);
    /*anim2.setRepeatCount(ObjectAnimator.INFINITE);
        anim2.setRepeatMode(ObjectAnimator.REVERSE);*/
    
        //指定这个集合里面有几个动画  ,使用的是一起播放的设置
    //set.playTogether(anim , anim2);
    
        //按照顺序播放 ,先播放第一个动画,然后播放第二个动画
        set.playSequentially(anim,anim2);
    
        //让集合动画播放起来
        set.start();
        }
    }
    

    注:属性动画中的条目的位置也发生了变化。

    八、属性动画在xml中

    在条目中的代码

    <?xml version="1.0" encoding="utf-8"?>
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" 
    android:valueFrom="0"
    android:valueTo="100"
    android:propertyName="translationX"
    android:duration="2000"
    android:repeatCount="infinite"
    android:repeatMode="reverse">
    </objectAnimator>
    

    在mainactivity中的代码

    public void translate(View v) {
    
        Animator animation = AnimatorInflater.loadAnimator(this, R.animator.translatex_demo);
    
        //让控件去播放这个动画
        animation.setTarget(iv);
    
        animation.start();
    }
    

    相关文章

      网友评论

          本文标题:十、Fragment和View

          本文链接:https://www.haomeiwen.com/subject/trtrqctx.html