美文网首页
View传输思路以及实现过程

View传输思路以及实现过程

作者: ccDown | 来源:发表于2018-12-21 23:09 被阅读0次

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


相关文章

网友评论

      本文标题:View传输思路以及实现过程

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