目前我正在尝试使用Android Studio编写小型应用时解决问题。
我有一个主要活动,用于在我的代码中切换不同的碎片。现在我需要加载一个新的片段,如果我的设备的方向被切换(例如从肖像到风景)。我用方法
这样做public void onConfigurationChanged(Configuration newConfig)
此时一切似乎都很好。
在我的第一个片段中,我有一个图像视图,它将被"透支"用一条画布线。由于新的方向片段需要具有相同大小的imageview(包含在XML_layout文件中)具有相同的行,我保存坐标,在切换到新的片段之前将它们从旧的Fragment类中取出,并尝试绘制再次使用该行的新imageview。画布线方法只是通过传递的角度(第一个属性)计算坐标。 另外,我在editText字段中显示坐标值。
现在我的问题是,在旋转设备之后,我将在editText字段中看到坐标但是我无法在新的片段中绘制我的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中包含一个新角度后重新绘制该行。
现在,如果方向已经改变并且我的新角度有可处理的数据,我也尝试绘制该线(整个想法是在两个图像视图中都有一个比较线,景观模式和portraitmode)。
但是如果我试图在onViewCreated这样的另一个地方触发我的drawLineOne方法,那我就错了:
java.lang.IllegalArgumentException: width and height must be > 0
在为Canvas对象创建Bitmap文件时会发生这种情况:
Bitmap bmp = Bitmap.createBitmap(MyImVi.getWidth(), MyImVi.getHeight(), Bitmap.Config.ARGB_8888);
有没有办法调用或创建一个在更改方向后触发的功能,并且在我的活动中可以看到新的片段?我想这就是它发生的主要问题,我已经尝试过调用我的drawLineOne:
onViewCreated()(在分配Textwatcher之前) 也喜欢那个
@覆盖 public void setUserVisibleHint(boolean isVisibleToUser){ super.setUserVisibleHint(isVisibleToUser); 如果(isVisibleToUser){ if(interimValueAzimut!= null){ drawLineOne(50,Color.GREEN,imageViewAzimut_ls); } } }
或者旋转后是否有更简单的方法来绘制该线?也许用我的TextWatcher的另一种方法?
我刚刚开始使用Java并且使用它变得更好但是总是遇到这样的问题所以请温柔一点:)
亲切的问候
答案 0 :(得分:0)
好吧,我通过检查更多stackoverflow Q& A线程设法解决了我的问题。 我刚拿了一个TreeObserver.OnGlobalLayoutListener。
view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
}
});
无论如何,已经解决了:)