转场动画:揭露动画,多视图转场,activity之间转场

本文探讨了Android中的动画应用,包括揭露动画的实现,通过CheckBox、View和Button的组合。利用`ViewAnimationUtils.createCircularReveal()`创建静态动画,并在onClick事件中通过自定义方法处理选中状态。同时,介绍了如何判断View的可见性及设置动画监听。此外,还讲解了多视图转场的实现,涉及到不同的布局文件、TransitionManager和Transition类的使用,帮助实现平滑的界面切换效果。
摘要由CSDN通过智能技术生成

//主页,涵盖三个动画功能点击事件,分别跳转:startActivity(new Intent(this, XXXActivity.class));
//一、揭露动画:RevealActivity ,由 CheckBox+View+Button 组成 ,
//    Animator animator = viewanimationutils.createcircularreceal() 静态方法。
//二、多视图转场:SceneActivity  transition.xml  FrameLayout  ViewGroup  Scene
//              TransitionManager.go  TransitionInflater.from和inflateTransition
//三、Activity间的转场动画  两个activity都是extends Activity   作用:点击小图看大图

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btnReveal:
                startActivity(new Intent(this, RevealActivity.class));
                break;
            case R.id.btnScene:
                startActivity(new Intent(this, SceneActivity.class));
                break;
            case R.id.btnActivity:
                startActivity(new Intent(this, FirstActivity.class));
                break;
        }
    }

}

//揭露动画,该页面由 CheckBox+View+Button 组成
//  View 的显示属性 android:visibility="invisible"
//  Button 的风格属性 style="?android:buttonBarButtonStyle" 按钮栏按钮样式
//  Animator animator = viewanimationutils.createcircularreceal() 静态方法设置属性参数
//onClick方法里有个自定义方法,这个方法里有两个自定义方法。用Boolean类型来处理选中和未选择情况的操作。
//要判断用户能否看见某个view,应使用 isShown()
//自定义揭露动画播放开始,设置播放属性,可见性为可见;
//自定义揭露动画退出方法,起始位置和终止位置改一下,设置监听,监听动画的开始、重复、和结束。
//                      animator.addListener(new AnimatorListenerAdapter() {可见性为不可见}


public class RevealActivity extends AppCompatActivity {

    private static final String TAG = "RevealActivity";
    private View mView;
    private CheckBox mPlayAnimationCheckBox;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reveal);
        //实例化view和CheckBox对象
        mView = findViewById(R.id.view);
        mPlayAnimationCheckBox = (CheckBox) findViewById(R.id.checkBox);
    }

    //button点击事件来开启动画,但是受到CheckBox的Boolean值限制。
    public void onClick(View view) {
        //取值,总开关
        final boolean playAnimation = mPlayAnimationCheckBox.isChecked();
        //点击事件,动画开启开关
        switch (view.getId()) {
            case R.id.buttonChangeVisibility:
                //处理更改可见性,调用自定义方法:playAnimation是开关
                //跳到下面挨个走流程
                handleChangeVisibility(playAnimation);
                break;
        }
    }

    //自定义方法,参数是 Boolean 值,即 CheckBox 的取值 isChecked()。
    private void handleChangeVisibility(boolean playAnimation) {
        Log.d(TAG, "handleChangeVisibility() called with: playAnimation = [" + playAnimation + "]");
        //要判断用户能否看见某个view,应使用 isShown()
        Log.d(TAG, "handleChangeVisibility: " + mView.isShown());
        //如果开了
        if (playAnimation) {
            //判断图片是否有显示
            if (mView.isShown()) {
                //如果已经显示的有,则调用自定义方法走退出流程,揭露动画退出形式。
                revealExit();
            } else {
                //否则调用自定义方法走进入流程,揭露动画形式。
                revealEnter();
            }
        } else {
            //如果没开总开关,有图片显示则隐藏图片,没有图片就显示图片
            //这个分支卵用不大
            if (mView.isShown()) {
                //把它设置为视图是不可见的,但它仍然占用布局空间。
                mView.setVisibility(View.INVISIBLE);
            } else {
                mView.setVisibility(View.VISIBLE);
            }
        }
    }

    //自定义揭露动画播放开始
    private void revealEnter() {
        int w = mView.getWidth();
        int h = mView.getHeight();

        //宽高
        int cx = w;
        int cy = h;
        //半径为对角线
        int r = (int) Math.hypot(w, h);
        //核心就是此静态方法
        Animator animator = ViewAnimationUtils.createCircularReveal(mView, cx, cy, 0, r);

        //可见性为可见
        mView.setVisibility(View.VISIBLE);

        animator.start();
    }

    //自
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值