2012-04-04 34 views
1

我試圖給textView子類並向它添加一個位圖。這是行不通的。 使用相同的子類,我通過繪製一條線來進行實驗。它仍然不起作用。 我試圖畫出文字。有用。TextView的onDraw支持圖形繪製嗎?

當我將基類從textView更改爲視圖。一切正常。

我想知道如果TextView中不支持的任何其他繪製文本之外? 有人可以顯示一個工作代碼的例子,關於如何繪製使用drawLine()onDraw()的視圖與基類的textView畫線?

package com.main.test; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.view.View; 
import android.widget.TextView; 

public class Display extends TextView{ 

    Paint p; 

    public Display (Context context) { 
     super(context); 
     init(); 
    } 

    public Display (Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    private void init() 
    { 
     p = new Paint(); 
     p.setColor(Color.WHITE); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 
     super.onDraw(canvas); 
     canvas.drawLine(0, 0, this.getMeasuredWidth(), this.getMeasuredHeight(), p); 
    } 
} 

主要活動的代碼 package com.main.test;

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class main extends Activity { 
    Display input; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     initcomponents(); 
    } 


    private void initcomponents() 
    { 
     input = (Display)findViewById(R.id.rateInput); 
    } 
} 

如果將其從TextView更改爲View。有用。

package com.main.test; 

import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.view.View; 
import android.widget.TextView; 

public class Display extends View{ 

    Paint p; 

    public Display (Context context) { 
     super(context); 
     init(); 
    } 

    public Display (Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    private void init() 
    { 
     p = new Paint(); 
     p.setColor(Color.WHITE); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 
     super.onDraw(canvas); 
     canvas.drawLine(0, 0, this.getMeasuredWidth(), this.getMeasuredHeight(), p); 
    } 
} 

主要活動的代碼 package com.main.test;

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.Window; 

public class main extends Activity { 
    View input; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     initcomponents(); 
    } 


    private void initcomponents() 
    { 
     input = (View)findViewById(R.id.rateInput); 
    } 
} 

確定這個系統不允許我現在發佈圖片。所以我不能告訴你第二個代碼的結果。

+0

是的。顯示你的代碼... – pleerock 2012-04-04 16:04:10

+0

我的第一個猜測是它應該工作。爲什麼你不應該能夠在畫布上繪製TextView? – KarlKarlsom 2012-04-04 16:13:29

回答

0
The Notepad example

借鑑了一個EditText是TextView的的一個子類線,所以它必須是可能的。我不確定爲什麼你的代碼無法正常工作,但請參閱this file中的LinedTextEdit

1

好的我找到了drawline不工作的原因。

當我刪除清單XML中的這一行。該線可以繪製。

安卓的inputType = 「numberDecimal」

但是,爲什麼......?