Save/restore android 中自定义视图的状态
Save/restore state of custom views in android
我已经为 EditText 实现了自定义视图,如下图所示:
现在这个自定义视图包括翻转、编辑、旋转、拖放和调整大小的功能。我在资源管理器中以位图格式保存此自定义视图。问题是我想编辑它,我想恢复自定义视图的细节并检索 CustomView 的每个细节,甚至是它的位置。那么,有什么方法可以实现吗?
您需要像这样存储所有编辑:
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;
}
上面的方法return视图的左上角位置,但是你需要从左上角计算右下角的高度,宽度。
创建一个 Pojo 将所有这些参数保存在一起,并将此 pojo 存储到 SharedPreferences 或数据库或应用程序上下文中。
最简单的方法
- 1 - 通过映射将所有必需的属性存储在首选项中,Pojo
或通过序列化。
- 2 - 在多个的情况下保留多个密钥
意见。
- 3 - 启动特定屏幕后,获取视图
首选项中的属性并将其设置为视图(正确的 util 方法
使用 Pref 键,设置所有内容和 return 视图)。
终于找了几天解决办法。
有一个名为 StickerView 的库可以帮助存储特定 Drawable Sticker 或任何 Text Sticker 的数据使用 Matrix
并且许多细节可以通过使用 StickerView
的对象来存储,并且可以根据应用程序的要求进行定制。
还有一个与此类似的库 StickerView。
我已经为 EditText 实现了自定义视图,如下图所示:
现在这个自定义视图包括翻转、编辑、旋转、拖放和调整大小的功能。我在资源管理器中以位图格式保存此自定义视图。问题是我想编辑它,我想恢复自定义视图的细节并检索 CustomView 的每个细节,甚至是它的位置。那么,有什么方法可以实现吗?
您需要像这样存储所有编辑:
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;
}
上面的方法return视图的左上角位置,但是你需要从左上角计算右下角的高度,宽度。
创建一个 Pojo 将所有这些参数保存在一起,并将此 pojo 存储到 SharedPreferences 或数据库或应用程序上下文中。
最简单的方法
- 1 - 通过映射将所有必需的属性存储在首选项中,Pojo
或通过序列化。 - 2 - 在多个的情况下保留多个密钥 意见。
- 3 - 启动特定屏幕后,获取视图
首选项中的属性并将其设置为视图(正确的 util 方法 使用 Pref 键,设置所有内容和 return 视图)。
终于找了几天解决办法。
有一个名为 StickerView 的库可以帮助存储特定 Drawable Sticker 或任何 Text Sticker 的数据使用 Matrix
并且许多细节可以通过使用 StickerView
的对象来存储,并且可以根据应用程序的要求进行定制。
还有一个与此类似的库 StickerView。