2013-05-02 213 views
1

我有一個TextView,用於在屏幕上顯示,並做了我想要的。不過,我精簡了一些後來的代碼,通過觸摸它的父代FrameLayout重新定位它。現在,TextView(名爲angleView)停止在屏幕上顯示,但是當我打印出它的座標時,它仍然以相同的方式工作。任何人都可以看到我做錯了什麼?Android - TextView不顯示

這裏是從我onCreate()方法的代碼:

angleView = new TextView(getApplicationContext()); 
angleView.setTextColor(Color.RED); 
angleView.setText("0"); 
angleView.setLayoutParams(new FrameLayout.LayoutParams(SCREEN_WIDTH/20, SCREEN_HEIGHT/20)); 

和從代碼的FrameLayoutonTouchListener

preview.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      float y = (centerPoint.getY() - event.getY() + STATUS_BAR_HEIGHT); 
      float x = (centerPoint.getX() - event.getX()); 
      double angle = Math.atan(y/x); 
      setAngleFieldData(event, angle, y, x); 
      setFingerFollower(event, angle); 
      setYMeasure(event, y); 
      setXMeasure(event, x); 
      setTextPositions(event, angle, y, x); 
      Log.i("angleX", String.valueOf(angleView.getX())); 
      Log.i("angleY", String.valueOf(angleView.getY())); 
      return true; 
     } 

     private void setAngleFieldData(MotionEvent event, double angle, float y, float x){ 
      angleView.setText(String.valueOf(angle)); 
      angleView.setX(event.getX()); 
      angleView.setY(event.getY()); 
      if(isRadians) { 
       if(x < 0 && y >= 0){ 
        angleView.setText(String.valueOf(2 * Math.PI + angle)); 
       } 
      } 

     } 

(另一方法是無關緊要的,它使用的是,所有的來自各種方法的代碼在onTouch中。)

而且如果你想知道,是的,那裏我s:

preview.addView(angleView); 

非常感謝!

編輯:所有的代碼是在onCreate()方法,內Activity

+0

是這樣的在一個Activity裏面?如果(是)不使用ApplicationContext,請使用適當的上下文。然後,爲了測試,強制TextView處於一個簡單的位置,以排除所有數學)。隨處添加LOGS以查看數字。 – 2013-05-02 01:46:10

+0

它會是'新的TextView(this)'? – Jeeter 2013-05-02 01:47:14

+0

如果你在一個活動,是的。如果你還在一個新的TextView(getActivity()) – 2013-05-02 01:49:04

回答

0

OK,我找到了真正的原因,它沒有工作(我覺得現在非常愚蠢)。如果你看,你會發現我將參數設置爲SCREEN_WIDTH和SCREEN_HEIGHT。好吧,我在設置這兩個常量之前初始化了angleView。

好一個,Jeeter:d

+0

仍然應該使用活動上下文來代替應用程序上下文。請檢查我答案中的鏈接,作爲您應該使用活動上下文的原因。 – Raghunandan 2013-05-02 03:42:00

1

ApplicationContext無法修改用戶界面。變化:

angleView = new TextView(getApplicationContext()); 

通過:

angleView = new TextView(this); 

或者如果你是一個片段內:

angleView = new TextView(getActivity()); 
+0

即使我改變它仍然不起作用。不過,它曾經使用getApplicationContext()正常工作。 – Jeeter 2013-05-02 01:53:43