2016-08-10 246 views
0

現在我正在嘗試使用Android Studio編程一個小應用程序來解決問題。在創建片段時通過畫布在畫布上繪製一條線

我有一個主要活動,用於在我的代碼中的不同片段之間切換。現在我需要加載一個新的片段,如果我的設備的方向正在切換(例如從縱向到橫向)。我正在用這種方法做到這一點

public void onConfigurationChanged(Configuration newConfig) 

和一切似乎都很好在這一點。

在我的第一個片段中,我有一個imageview,它將用一條畫布線「透支」。由於新的定位片段需要具有相同大小的相同大小的imageview(包含在XML_layout文件中),我保存了座標,在切換到新的片段之前將它們從舊的片段類中取出,並嘗試繪製新的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後重新繪製線條。

現在我試圖畫出這條線,如果方向已經改變,並且有新角度的可處理數據(整個想法是在圖像瀏覽,橫向模式和肖像模式中都有一條比較線) )。

但是,如果我試圖在像onViewCreated另一個地方,我在錯誤前往觸發我drawLineOne方法:

java.lang.IllegalArgumentException: width and height must be > 0 

出現這種情況,同時爲我的Canvas對象的位圖文件:

Bitmap bmp = Bitmap.createBitmap(MyImVi.getWidth(), MyImVi.getHeight(), Bitmap.Config.ARGB_8888); 

有沒有什麼方法可以調用或創建一個函數,在方向改變後新的片段在我的活動中可見?我想這就是爲什麼它發生時,香港專業教育學院已經嘗試打電話給我drawLineOne中的主要問題:在頭部

  • 在onStart()
  • 的onResume()
  • onActivityCreated()
  • onViewCreated() 也是這樣的

    @覆蓋 公共無效setUserVisibleHint(布爾isVisibleToUser)(分配Textwatcher前){ 超。setUserVisibleHint(isVisibleToUser);如果(isVisibleToUser){ if(interimValueAzimut!= null){ drawLineOne(50,Color.GREEN,imageViewAzimut_ls); }} }

或者是有一個更容易畫出旋轉後該行的方式?也許與我的TextWatcher的另一種方法?

我剛剛開始使用Java,並獲得與它更好,但總是在類似這樣的問題被卡住所以請溫柔:)

親切的問候

回答

0

好吧,我已經成功通過檢查來解決我的問題更多計算器Q & A線程。 我只帶了一個TreeObserver.OnGlobalLayoutListener。

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

不管怎麼說,解決:)