位图不更新/显示旧值
Bitmap not updating/ showing old values
我有一个线性布局,其中包含多个要由用户填写的字段。这些字段将用文本或十进制数字填充,它们都是带有一个日期选择器的 TextInputLayouts。用户填写完这些字段后,我有一个查看按钮,单击该按钮会显示在图像视图中输入的所有值的预览。我通过使用位图和 canvas 显示图像,并使用以下代码将位图作为参数发送到我的 material 底部 sheet。
private Bitmap getDailySheetBitmap() {
Bitmap bitmap = Bitmap.createBitmap(completeSheetLinearLayout.getWidth(), completeSheetLinearLayout.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Log.d("Bitmap", "bitmap size: "+bitmap.getByteCount());
completeSheetLinearLayout.draw(canvas);
return bitmap;
}
发送arg的代码是
private void buildBottomSheet(Bitmap bitmap) {
Bundle args = new Bundle();
args.putParcelable("Bitmap", bitmap);
ViewDailySheet viewDailySheet = new ViewDailySheet();
viewDailySheet.setArguments(args);
viewDailySheet.show(getChildFragmentManager(), "DailySheet");
}
问题在于,在用户查看字段并对这些字段进行更改后,当用户再次单击查看按钮时,会显示具有相同旧值的位图。我试过回收位图,使视图、requestLayout() 和 forceLayout() 方法无效。但是 none 有用。
这是将位图放入图像的代码 view.This 在底部 sheet 对话框片段中。
if (getArguments() != null) {
bitmap = getArguments().getParcelable("Bitmap");
binding.dailySheetImage.invalidate();
binding.dailySheetImage.setImageBitmap(bitmap);
getArguments().clear();
}
我做错了什么或遗漏了什么?
位图只捕获它认为已更改的内容。如果文本字段(不是数据,只是 UI)没有改变,它将显示与以前相同的文本字段值。所以我刷新了整个布局,因为它会通过以下代码重新绘制整个布局。
private void refreshView() {
completeSheetLinearLayout.setVisibility(View.GONE);
completeSheetLinearLayout.setVisibility(View.VISIBLE);
}
我把这段代码放在创建位图之前。
我有一个线性布局,其中包含多个要由用户填写的字段。这些字段将用文本或十进制数字填充,它们都是带有一个日期选择器的 TextInputLayouts。用户填写完这些字段后,我有一个查看按钮,单击该按钮会显示在图像视图中输入的所有值的预览。我通过使用位图和 canvas 显示图像,并使用以下代码将位图作为参数发送到我的 material 底部 sheet。
private Bitmap getDailySheetBitmap() {
Bitmap bitmap = Bitmap.createBitmap(completeSheetLinearLayout.getWidth(), completeSheetLinearLayout.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
Log.d("Bitmap", "bitmap size: "+bitmap.getByteCount());
completeSheetLinearLayout.draw(canvas);
return bitmap;
}
发送arg的代码是
private void buildBottomSheet(Bitmap bitmap) {
Bundle args = new Bundle();
args.putParcelable("Bitmap", bitmap);
ViewDailySheet viewDailySheet = new ViewDailySheet();
viewDailySheet.setArguments(args);
viewDailySheet.show(getChildFragmentManager(), "DailySheet");
}
问题在于,在用户查看字段并对这些字段进行更改后,当用户再次单击查看按钮时,会显示具有相同旧值的位图。我试过回收位图,使视图、requestLayout() 和 forceLayout() 方法无效。但是 none 有用。
这是将位图放入图像的代码 view.This 在底部 sheet 对话框片段中。
if (getArguments() != null) {
bitmap = getArguments().getParcelable("Bitmap");
binding.dailySheetImage.invalidate();
binding.dailySheetImage.setImageBitmap(bitmap);
getArguments().clear();
}
我做错了什么或遗漏了什么?
位图只捕获它认为已更改的内容。如果文本字段(不是数据,只是 UI)没有改变,它将显示与以前相同的文本字段值。所以我刷新了整个布局,因为它会通过以下代码重新绘制整个布局。
private void refreshView() {
completeSheetLinearLayout.setVisibility(View.GONE);
completeSheetLinearLayout.setVisibility(View.VISIBLE);
}
我把这段代码放在创建位图之前。