View传输思路以及实现过程

gayhub:https://github.com/soulListener/ViewTransfer


需求:实现一个页面View的传输到另一个页面,实现跨进程通讯

2018-11-23
1.实现界面ContentView的保存与传递?实现XML动态加载布局(思路不正确,改变实现形式)
2.跨进程通讯可选用: AIDL、文件、socket


2018-11-25
通过saveInstanceState实现界面的传输?(思路不正确,改变实现形式)


18.12.18 界面通过对view关键性信息进行保存,如控件包名 控件背景 宽 高 等信息。

对1进行思路修改:View传输过程
1.自定义协议进行View相关内容的保存(通过链表以多叉树的形式保存)
2.将对象输出到文件目录(文件共享形式实现跨进程)
3.进行文件目录的传输
4.进行文件目录的读取并通过先序遍历还原为View
5.将View根据Tree的形式添加到界面中(递归遍历添加)
6.屏幕适配

遇到的问题:
1、在Activity的OnCreate()事件输出view的x、y、height、width等参数全为0,要等UI控件都加载完了才能获取到这些数据。

        //直接调用textview.measuredWidth,textview.measuredHeight只能得到0,需首先调用下列方法
        //通过反射获取控件名称
        String content = ((TextView)childView).getText().toString();
        String name = childView.getClass().getName();

        //获取宽、高
        childView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
        int width = childView.getMeasuredWidth();
        int height = childView.getMeasuredHeight();

        //获取坐标
        int[] locations = new int[2];
        childView.getLocationOnScreen(locations);
        int x = locations[0];
        int y = locations[1];

详情:https://www.jianshu.com/p/d18f0c96acb8

2、将数据类实现Serializable接口进行存储
3、权限动态申请
4、获取全部子view

 /**
 * 通过递归获取全部的子view
 * @param parentView
 * @return
 */
public static ArrayList<View> getAllChildViews(View parentView){
    ArrayList arrayList = new ArrayList();

    if (parentView instanceof  ViewGroup) {
        ViewGroup viewGroup = (ViewGroup) parentView;
        for (int i = 0; i < viewGroup.getChildCount(); i++) {
            View childView = viewGroup.getChildAt(i);
            arrayList.add(childView);
            arrayList.addAll(getAllChildViews(childView));
        }
    }
    return arrayList;
}

5、view无法直接进行width和height的设置,需要使用LayoutParams进行转化
6、自定义View通过findviewbyid返回为null解决方法
原因是在自定义View的时候自动生成了一个只有一个带context的构造函数,而通过XML文件创建的view对象为两个参数即(context,attr)的对象,手动添加第二个构造函数之后,没有把super里面的第二个参数加上。
7、DecoreView子view包含title和contentView
8、view的背景颜色通过获取坐标?
9、通过反射创建自定义view的时候失败
原因:代码中反射创建时参数个数不正确
10、获取ViewGroup的宽度和高度不正确?


2018-12-21
对1进行思路另一种实现形式:通过XML实现界面的复制?
通过view生成xml文件
动态加载xml文件生成view


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,533评论 4 61
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,550评论 1 32
  • 我会 把你留在我的记忆里 我会 把你留在我的日记里 但是 我不能再继续伤害你 对不起
    受过伤的小兽阅读 227评论 0 1
  • 王先生 和你在一起,每一天都很幸福。 好好爱你已经成为习惯。 风雨交加,有你的日子便是晴天。 我们 像火锅,五味俱...
    玲玲小胖阅读 366评论 0 1
  • “老公,我最近特别累,也特别烦,什么都不想做” “怎么了老婆,你好好休息一下吧。” “我也不知道,就是烦,看什么都...
    莉丽_be50阅读 992评论 0 2

友情链接更多精彩内容