2012-08-02 99 views
2

刚刚开始Android开发,我在使用画布简单绘制视图时遇到问题。安卓在画布上绘制

据我了解,像这样:

import android.content.Context; 
import android.graphics.Canvas; 
import android.view.View; 

public class DrawView extends View 
{ 
    public DrawView(Context context) 
    { 
     super(context); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) 
    { 
     super.onDraw(canvas); 
     canvas.drawRGB(255,0,0); 
    } 
} 

以此作为我的活动:

public class Prototype1 extends Activity 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

而本作的布局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
    <com.dhs2.prototype1.DrawView 
     android:id="@+id/map" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     /> 
</LinearLayout> 

应该只是随处绘制红色,但我只是得到一个空白屏幕。 任何想法我哪里错了?

+0

你试过切换super.onDraw的顺序()和canvas.drawRGB()? – scriptocalypse 2012-08-02 15:46:36

回答

5

既然你添加自定义视图在一个XML配置文件,您应该添加2个构造函数:

public DrawView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 


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

这是因为你通过一些属性的观点,像fill_parentwrap_content,所以构造public DrawView(Context context)将不会被调用。

然而,这将工作,如果你不会宣布在XML布局文件自定义视图,而是直接从onCreate()这样设置的:

setContentView(new DrawView(this)); 
+0

感谢您加入正确的答案。另一件需要注意的事情是,当我试图从原始问题运行代码时,调试器“崩溃”,并且堆栈跟踪表明该活动引发异常。问题说“显示黑屏”表示程序成功运行,没有例外。除了提供问题的答案之外,应该注意的是,注意调试器和logcat,并注意应用程序正在崩溃过程中非常重要。 – scriptocalypse 2012-08-02 15:56:14

+0

很高兴我帮你。如果回答您的问题,请将答案标记为已接受。 – 2012-08-03 07:26:54