【发布时间】:2016-08-10 10:32:13
【问题描述】:
现在我正在尝试在使用 Android Studio 编写一个小应用程序时解决一个问题。
我有一个 Main Activity 用于在我的 Code 中的不同 Fragment 之间切换。现在,如果我的设备的方向正在切换(例如从纵向到横向),我需要加载一个新的片段。我正在使用该方法进行此操作
public void onConfigurationChanged(Configuration newConfig)
目前一切似乎都很好。
在我的第一个片段中,我有一个图像视图,它将用一条画布线“透支”。由于新的方向片段需要具有相同大小的图像视图(包含在 XML_layout 文件中)和同一行,我正在保存坐标,在切换到新的之前将它们从旧的 Fragment 类中取出,并尝试绘制新的图像视图再次与该行。画布线方法只是通过传递的角度(第一个属性)计算坐标。 另外,我在 editText 字段中显示坐标值。
现在我的问题是,在旋转设备后,我将在我的 editText 字段中看到坐标,但我无法在新的 Fragment 中绘制我的 ImageView,因为我正在使用 TextWatcher / afterTextChanged 触发该事件
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
drawLineOne(50, Color.Green, MyImVi);
}
});
Textwatcher 位于
public void onViewCreated(View view, Bundle savedInstanceState)
我的新片段。
Textwatcher 的想法是每次在该 editText 包含一个新角度后重绘线条。
现在,如果方向已经改变并且我的新角度有可处理的数据,我现在也尝试绘制这条线(整个想法是在图像视图、横向模式和纵向模式中都有一条比较线) .
但如果我试图在另一个地方(如 onViewCreated)触发我的 drawLineOne 方法,我会出错:
java.lang.IllegalArgumentException: width and height must be > 0
为我的 Canvas 对象创建位图文件时会发生这种情况:
Bitmap bmp = Bitmap.createBitmap(MyImVi.getWidth(), MyImVi.getHeight(), Bitmap.Config.ARGB_8888);
有没有什么方法可以调用或创建一个函数,该函数将在方向改变并且新的 Fragment 在我的活动中可见后触发?我想这就是它发生的主要问题,我已经尝试在以下位置调用我的 drawLineOne:
- onStart()
- onResume()
- onActivityCreated()
-
onViewCreated() 在 Head 中(在分配 Textwatcher 之前) 也这样
@覆盖 公共无效 setUserVisibleHint(布尔 isVisibleToUser){ super.setUserVisibleHint(isVisibleToUser); if(isVisibleToUser){ if(interimValueAzimut != null) { drawLineOne(50,Color.GREEN, imageViewAzimut_ls); } } }
或者有没有更简单的方法在旋转之后画出那条线?也许用我的 TextWatcher 的另一种方法?
我刚开始使用 Java,并且越来越好,但总是卡在这样的问题上,所以请温柔:)
亲切的问候
【问题讨论】:
标签: canvas bitmap imageview fragment