【问题标题】:Save/restore state of custom views in android在android中保存/恢复自定义视图的状态
【发布时间】:2017-02-09 13:16:28
【问题描述】:

我已经为 EditText 实现了自定义视图,如下图所示:

现在这个自定义视图包括翻转、编辑、旋转、拖放和调整大小的功能。我在资源管理器中以位图格式保存这个自定义视图。问题是我想编辑它,我想恢复自定义视图的细节并检索 CustomView 的每一个细节,甚至它的位置。那么,有什么方法可以实现吗?

【问题讨论】:

  • 然后将其保存为一些序列化机制,如 JSON 或 XML。将其属性保存在某处。
  • @VladMatvienko 我想离线实现它。那么,有什么办法可以做到吗?
  • 我是不是在网上说了些什么?
  • @VladMatvienko 我实际上想保存包括许多视图和位置的整个状态,我认为将值存储在 JSON 或 XML 中不是可行的解决方案,我们还有其他方法吗那个?
  • 基本上你需要序列化它。最常见的序列化格式是 JSON 和 XML。所以其实有很多方法。您甚至可以创建自己的序列化格式。

标签: android android-studio view android-custom-view custom-view


【解决方案1】:

您需要存储所有编辑,例如:

Rotation :为此,您必须保持从初始值 0 到下一个旋转值的角度。

Flip :为此创建一个标志,并设置 True ,前后的值为 false 。

Text : 你知道EditText的文本格式。

Layout position within parent View:

用于计算父视图中的布局位置,使用下面的方法并为此创建四个 int 变量,

Left =

Top =

Right =

Bottom =

Height =

Width =

private Map<String,Integer>  getPositionOnScreen(View view){
        Map<String,Integer> map = new HashMap<String,Integer>();
        View rootLayout = view.getRootView().findViewById(android.R.id.content);

        int[] viewLocation = new int[2];
        view.getLocationOnScreen(viewLocation);

        int[] rootLocation = new int[2];
        rootLayout.getLocationOnScreen(rootLocation);

        int relativeLeft = viewLocation[0] - rootLocation[0];
        int relativeTop  = viewLocation[1] - rootLocation[1];

        int height = viewLocation[0] - rootLocation[0];
        int width  = viewLocation[1] - rootLocation[1];


        map.put("left",relativeLeft);
        map.put("top",relativeTop);
        map.put("height",view.getLayoutParams().height);
        map.put("width",view.getLayoutParams().width);
        return map;
    }

上面的方法返回视图的左上角位置,但是你需要根据左上角和高宽来计算右下角的位置。

创建一个 Pojo 以将所有这些参数保存在一起并将此 pojo 存储到 SharedPreferences 或数据库或应用程序上下文中。

【讨论】:

    【解决方案2】:

    最简单的方法

    • 1 - 通过地图 Pojo 将所有必需的属性存储在首选项中
      或通过序列化。
    • 2 - 在多个的情况下保留多个键 意见。
    • 3 - 启动特定屏幕后,获取视图
      首选项中的属性并将其设置为视图(正确的 util 方法 它采用 Pref 键,设置所有内容并返回视图)。

    【讨论】:

      【解决方案3】:

      终于,经过几天的搜索,我得到了解决方案。

      有一个名为StickerView 的库,它可以帮助存储特定Drawable Sticker 或任何Text Sticker 的数据,使用Matrix 可以存储许多细节通过使用 StickerView 的对象,可以根据应用程序的要求进行自定义。

      还有一个类似StickerView的库。

      【讨论】:

        猜你喜欢
        • 2017-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-26
        • 2011-08-28
        • 1970-01-01
        • 1970-01-01
        • 2013-11-29
        相关资源
        最近更新 更多