KShareViewActivityManager共享元素位移动画

[复制链接]
来自: MrlLee 分类: Android精品源码 上传时间: 2016-4-6 18:31:42
Tag:Android 效果图 Create Failed commit

项目介绍:

Permalink
Failed to load latest commit information.
KShareViewActivityManager.java Update KShareViewActivityManager.java
LICENSE.md Create LICENSE.md
README.md Update README.md

KShareViewActivityManager



一个兼容Android 5.0 以下Shared Element Transition (页面间共享元素位移动画)库



精简到了一个类



2016 1 25 更新 支持TextView 的子类颜色渐变了






效果图:



将就看吧



APP 名字叫番茄ToDo,是一个番茄钟和ToDoList 结合的APP(对,我就是嫌番茄土豆太难用太反人类了自己写的)喜欢的朋友可以支持一下:D



先说缺点吧:在第一个Activity 中的目标View 是wrap_content 时,位移会偏移一点点



使用方法:



A->B



1.在第一个Activity中:



[Java] 查看源文件 复制代码
  img = (ImageView) findViewById(R.id.img);
  title = (TextView) findViewById(R.id.title);
  KShareViewActivityManager.getInstance(MainActivity.this).startActivity(MainActivity.this, SecondActivity.class,R.layout.activity_main,R.layout.activity_second, img, title);


第三个参数是要进行动画的View 所在的layout 的xml ,举例:如果要对ListView 的Item 进行动画,请传入item 布局的xml。



第四个参数 R.layout.activity_second 传入的是第二个Activity 的布局layout id,之后的参数是指需要共享元素动画的View



如何让Manager 知道是哪两个View 在页面之间对应呢?tag 一样即可,如:activity_main 中:



[Java] 查看源文件 复制代码
 


在activity_second 中:



[Java] 查看源文件 复制代码
 


tag一样即可



B->A (回退)



请在ActivityB 中添加:



[Java] 查看源文件 复制代码
@Override
public void onBackPressed() {
    KShareViewActivityManager.getInstance(SecondActivity.this).finish(SecondActivity.this);
}


注意事项



因为是直接操作的Content 显示区域,所以支持Activity ,Fragment 互相跳,只要是在屏幕中显示的View,都可以进行动画



由于进行动画的View 并不是原来的View,而是重新inflate 出来的,因此部分自定义属性并没有被赋值,Manager 对常见的TextView 和ImageView 的部分属性参照原View进行了复制,但如果是其他View的其他属性,还请在 changeViewProperty(View view) 这个回调函数中对其自定义属性进行设置。
如:



[Java] 查看源文件 复制代码
  KShareViewActivityManager.getInstance(this).withAction(new KShareViewActivityAction() {
                    @Override
                    public void onAnimatorStart() {
                    }
                    @Override
                    public void onAnimatorEnd() {
                    }
                    @Override
                    public void changeViewProperty(View view) {
                        if(view.getTag().equals(\"text\")){
                            ((MyTextView)view).setOtherProperty(oringinTextView.getOtherProperty);
                        }
                        if(view.getTag().equals(\"xxx\")){
                            ...
                        }
                    }
                });


好啦



其他用法(添加监听器,设置动画时间),以下是第二张效果图的代码:



[Java] 查看源文件 复制代码
  KShareViewActivityManager.getInstance(this).withAction(new KShareViewActivityAction() {
                    @Override
                    public void onAnimatorStart() {
                    }
                    @Override
                    public void onAnimatorEnd() {
                    }
                    @Override
                    public void changeViewProperty(View view) {
                        view.setBackgroundColor(0x00ffffff);
                    }
                }).setDuration(1000).startActivity(this, CountDownActivity.class, R.layout.list_item, R.layout.activity_count_down,
                                 (View) ((CommandEvent) event).obj);


差点忘了,还可以 withIntent 来自定义Intent ,同时 withIntentAndRequestCode(Intent intent,int requestCode) 也可以达到startActivityForResult 的目的。




相关源码推荐:

我来说两句
所有评论(6)
766601186 2016-4-6 18:47:11
楼主用心了,内容非常精彩。
回复
雪洗中关村 2016-7-1 10:19:56
我只是路过打酱油的。
回复
pinpo 2018-1-3 11:49:23
楼主威武啊,安卓巴士有你更给力!
回复
nnn19981117 2019-6-11 22:24:56
学习学习!
回复
htt.123 2019-6-23 17:24:27
我只是路过打酱油的。
回复
htt.123 2019-6-23 17:26:45
楼主用心了,内容非常精彩。
回复
提取码:  下载次数:5 状态:已购或VIP 售价:10(原价:10)金钱 下载权限:初级码农 
1314 0 5
代码贡献英雄榜
用户名 下载数
联系我们
首页/微信公众账号投稿
帖子代码编辑/版权问题
QQ:435399051,1294855032
如何获得代码达人称号?
如何成为签约作者?
领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )