TextView的onDraw是否支持图形绘制?

时间:2012-04-04 16:00:09

标签: android

我尝试将textView子类化并向其添加位图。这是行不通的。 使用相同的子类,我通过绘制一条线进行实验。它仍然无法正常工作。 我试着画文字。它有效。

当我将基类从textView更改为View时。一切正常。

我想知道textView是否不支持绘制除文本之外的任何其他内容? 有人可以在一个带有textView基类的视图的onDraw()中显示如何使用drawLine()绘制一条线的工作代码示例吗?

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);
    }
}

好的,这个系统暂时不允许我发布图片。所以我无法向您展示第二代码的结果。

2 个答案:

答案 0 :(得分:1)

好的,我找到了drawline无法正常工作的原因。

当我在清单XML中删除此行时。这条线可以画出来。

机器人:的inputType = “numberDecimal”

但为什么......?

答案 1 :(得分:0)

The Notepad example在EditText上绘制线条,这是TextView的子类,所以它必须是可能的。我不确定您的代码为什么不起作用,但请参阅this file中的LinedTextEdit