【问题标题】:painting a line via canvas over a imageview while fragment is created在创建片段时通过画布在图像视图上绘制一条线
【发布时间】: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


    【解决方案1】:

    好的,我已经通过检查更多 stackoverflow Q&A 线程来解决我的问题。 我刚刚拿了一个 TreeObserver.OnGlobalLayoutListener。

    view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
            }
        });
    

    无论如何,解决了:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-07
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 2016-07-08
      相关资源
      最近更新 更多